Identica
Вход

Как проходит вход

Что происходит между заходом игрока на прокси и его попаданием на сервер.

Каждый игрок, который заходит на сервер, проходит одни и те же несколько этапов. Если знать их, остальную конфигурацию понять проще.

От захода до сервера

  1. Игрок подключается. Identica изучает подключение: ник, адрес, имя хоста, через которое зашёл клиент, и то, что каждый провайдер может сказать об игроке, например принадлежит ли ник лицензионному аккаунту.
  2. Выбирается провайдер. Identica решает, какой провайдер обработает игрока. См. Как выбирается провайдер.
  3. Запускается сценарий. Какой именно, зависит от игрока:
    • аутентификация — для игрока, у которого есть аккаунт;
    • регистрация — для игрока, у которого аккаунта нет;
    • миграция — для игрока, который попросил перенести аккаунт на другой провайдер.
  4. У игрока что-то запрашивают, если нужно. Сценарий может ждать игрока — например, пароль, выбор провайдера или код из приложения-аутентификатора. Пока сценарий ждёт, игрок находится на сервере step из маршрутизации.
  5. Открывается сессия. Когда сценарий завершён, у аккаунта есть сессия — на всё время, пока игрок в сети.
  6. Игрок направляется на сервер. Identica отправляет игрока на сервер complete.

Кто выбирает провайдера — Identica или игрок, — зависит от выбора провайдера в сценарии. В обоих случаях у игрока запрашивают то, что нужно выбранному провайдеру.

Выход во время входа

Вход, который ждёт игрока, сохраняется на время pipelineTtl сценария — по умолчанию пять минут; значение задаётся в engine.yml.

  • При allowResume: true (по умолчанию) игрок, который вышел и зашёл снова за это время, продолжает с того места, где остановился. Игрок, который при регистрации уже ввёл пароль в первый раз, получит запрос на его подтверждение, а не на первый ввод.
  • При allowResume: false такой игрок начинает заново.
  • Переподключение, которого требует сам вход, например повторный заход после выбора Premium, всегда продолжает вход.

Сохранённый вход принадлежит подключению, которое его создало: нику вместе с адресом, с которого подключается игрок. Имя хоста, через которое зашёл клиент, не учитывается.

Два подключения с одним ником

Два клиента могут одновременно пытаться войти с одним ником — например, игрок и кто-то, кто знает его ник. Identica разделяет их:

  • Игрок, который возвращается с тем же ником и с того же адреса, продолжает свой вход на любом прокси сети.
  • Клиент, который использует этот ник с другого адреса, начинает собственный вход. Он никогда не видит, не продолжает и не меняет прогресс другого подключения, поэтому у него спрашивают пароль, даже если владелец его уже ввёл.
  • Пока одно подключение входит под ником, второе подключение с этим ником с другого адреса отклоняется с сообщением engine.usernameHeld. Ник снова свободен, когда этот вход завершается, игрок уходит или проходит pipelineTtl. Если прокси этого входа остановился или упал, ник свободен через replication.heartbeatTimeout.
  • Если оба подключения приходят в один момент на два прокси, ник занимает только одно из них. Второе отключается с сообщением engine.usernameHeld, как только его вход начинает ждать игрока.
  • Подключение, идентичность которого подтверждает провайдер, например проверенный лицензионный вход, не отклоняется. Оно побеждает, а подключение, которое держало ник, отключается. Учитывается только такое подтверждение — никогда не имя хоста, не ник и не адрес.
  • Когда подключение завершает вход в аккаунт, все остальные подключения, которые ещё входят в этот аккаунт или под его ником, на любом прокси, отключаются с сообщением engine.concurrentLoginKick. Для подключений, которые уже вошли, действует политика сессий.

На одном прокси второго игрока с ником, который уже в сети, отклоняет сам прокси.

Адрес, подключения с которого снова и снова отклоняются таким образом, на время блокирует sentinel.

Когда вход не удаётся

Игрок, вход которого не может продолжиться, отключается с сообщением о причине — например, неверный пароль, ник, которым владеет другой аккаунт, или несуществующий сервер. Любое сообщение можно изменить; см. Сообщения. Частые причины перечислены в разделе Решение проблем.

На этой странице