Как проходит вход
Что происходит между заходом игрока на прокси и его попаданием на сервер.
Каждый игрок, который заходит на сервер, проходит одни и те же несколько этапов. Если знать их, остальную конфигурацию понять проще.
От захода до сервера
- Игрок подключается. Identica изучает подключение: ник, адрес, имя хоста, через которое зашёл клиент, и то, что каждый провайдер может сказать об игроке, например принадлежит ли ник лицензионному аккаунту.
- Выбирается провайдер. Identica решает, какой провайдер обработает игрока. См. Как выбирается провайдер.
- Запускается сценарий. Какой именно, зависит от игрока:
- аутентификация — для игрока, у которого есть аккаунт;
- регистрация — для игрока, у которого аккаунта нет;
- миграция — для игрока, который попросил перенести аккаунт на другой провайдер.
- У игрока что-то запрашивают, если нужно. Сценарий может ждать игрока — например, пароль, выбор провайдера или код из приложения-аутентификатора. Пока сценарий ждёт, игрок находится на сервере
stepиз маршрутизации. - Открывается сессия. Когда сценарий завершён, у аккаунта есть сессия — на всё время, пока игрок в сети.
- Игрок направляется на сервер. Identica отправляет игрока на сервер
complete.
Кто выбирает провайдера — Identica или игрок, — зависит от выбора провайдера в сценарии. В обоих случаях у игрока запрашивают то, что нужно выбранному провайдеру.
Выход во время входа
Вход, который ждёт игрока, сохраняется на время pipelineTtl сценария — по умолчанию пять минут; значение задаётся в engine.yml.
- При
allowResume: true(по умолчанию) игрок, который вышел и зашёл снова за это время, продолжает с того места, где остановился. Игрок, который при регистрации уже ввёл пароль в первый раз, получит запрос на его подтверждение, а не на первый ввод. - При
allowResume: falseтакой игрок начинает заново. - Переподключение, которого требует сам вход, например повторный заход после выбора Premium, всегда продолжает вход.
Сохранённый вход принадлежит подключению, которое его создало: нику вместе с адресом, с которого подключается игрок. Имя хоста, через которое зашёл клиент, не учитывается.
Два подключения с одним ником
Два клиента могут одновременно пытаться войти с одним ником — например, игрок и кто-то, кто знает его ник. Identica разделяет их:
- Игрок, который возвращается с тем же ником и с того же адреса, продолжает свой вход на любом прокси сети.
- Клиент, который использует этот ник с другого адреса, начинает собственный вход. Он никогда не видит, не продолжает и не меняет прогресс другого подключения, поэтому у него спрашивают пароль, даже если владелец его уже ввёл.
- Пока одно подключение входит под ником, второе подключение с этим ником с другого адреса отклоняется с сообщением
engine.usernameHeld. Ник снова свободен, когда этот вход завершается, игрок уходит или проходитpipelineTtl. Если прокси этого входа остановился или упал, ник свободен черезreplication.heartbeatTimeout. - Если оба подключения приходят в один момент на два прокси, ник занимает только одно из них. Второе отключается с сообщением
engine.usernameHeld, как только его вход начинает ждать игрока. - Подключение, идентичность которого подтверждает провайдер, например проверенный лицензионный вход, не отклоняется. Оно побеждает, а подключение, которое держало ник, отключается. Учитывается только такое подтверждение — никогда не имя хоста, не ник и не адрес.
- Когда подключение завершает вход в аккаунт, все остальные подключения, которые ещё входят в этот аккаунт или под его ником, на любом прокси, отключаются с сообщением
engine.concurrentLoginKick. Для подключений, которые уже вошли, действует политика сессий.
На одном прокси второго игрока с ником, который уже в сети, отклоняет сам прокси.
Адрес, подключения с которого снова и снова отклоняются таким образом, на время блокирует sentinel.
Когда вход не удаётся
Игрок, вход которого не может продолжиться, отключается с сообщением о причине — например, неверный пароль, ник, которым владеет другой аккаунт, или несуществующий сервер. Любое сообщение можно изменить; см. Сообщения. Частые причины перечислены в разделе Решение проблем.
