Identica
Вход

Сессии

Одна сессия на аккаунт, что происходит, когда аккаунт входит дважды, и как сессии завершаются.

Сессия существует, пока игрок в системе. У аккаунта одна сессия, и она принадлежит подключению, которое её открыло. Администраторы просматривают и завершают сессии командой /identica admin session; см. Управление аккаунтами.

Вход из второго места

Вход с того же подключения продолжает его сессию. Когда аккаунт входит с другого подключения, пока у него есть сессия, — например, через второй прокси сети, — решает concurrencyPolicy в settings.yml:

ПолитикаПрежнее подключениеНовый вход
REPLACE_EXISTING (по умолчанию)отключается с сообщением engine.concurrentLoginKick, на каком бы прокси оно ни находилосьпродолжает игру
REJECT_NEWпродолжает игруотклоняется с сообщением engine.concurrentLoginRefused
sessions:
  concurrencyPolicy: "REPLACE_EXISTING"

Провайдер может использовать политику, отличную от остальной сети: задайте session.concurrencyPolicy в его записи в providers/providers.yml.

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

Два входа в один момент

Если два входа одного аккаунта завершаются в один момент — на одном прокси или на двух, использующих общий Redis, — засчитывается только тот, который записан первым. Второй отключается с сообщением engine.concurrentChangeKick, которое просит игрока переподключиться, и не оставляет сессии. Когда игрок переподключится, политика решит, как для любого последующего входа.

Как завершается сессия

  • Выход игрока закрывает только сессию его собственного подключения. Подключение, чью сессию заменили, больше не держит сессию, поэтому его выход не завершает сессию, которая её заменила.
  • Администратор может завершить сессию командой /identica admin session end.
  • Если прокси остановился или упал, не закрыв свои сессии, другие прокси сети ещё видят эти сессии в течение replication.heartbeatTimeout — по умолчанию 30 секунд. До тех пор REJECT_NEW по-прежнему отклоняет новый вход этих аккаунтов. Прокси, который держит подключение, считает его сессию завершённой, как только это подключение перестаёт быть в сети.

Сообщения

Сообщение в messages.ymlКому показывается
engine.concurrentLoginKickпрежнему подключению, которое отключает REPLACE_EXISTING, и подключению, которое ещё входит, когда аккаунт входит в другом месте
engine.concurrentLoginRefusedновому входу, который отклоняет REJECT_NEW
engine.concurrentChangeKickподключению, вход которого раньше записали в другом месте

Если очистить сообщение, изменится только текст. Подключение всё равно будет отключено или отклонено; вход, отклонённый при REJECT_NEW, тогда показывает общее сообщение об ошибке сценария.

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