History

Последовательность сетевого протокола

  1. лаунчер подключается к АМР серверам для авторизации, обновления и генерации уникального номера сессии
  2. далее устанавливаются переменные окружения для клиента (адреса серверов, логин, сессия и т.п.) и запускается WOLA.exe
  3. при старте, клиент подключается к WorldServer и ждет разрешения подключаться дальше
    1. WorldServer проверяет нет ли активного подключения с таким же логином и если есть, выбрасывает старого клиента, разрешая подключаться новому
  4. далее клиент подключается к ItemServer
    1. ItemServer запрашивает у AppServer наличие незаконченного боя для этого клиента и если есть, посылает инфу об этом
    2. в случае если боев нет, посылается инфа о корабле, игроке, арсенале и т.п.
  5. клиент получает соответствующую инфу от ItemServer и либо подключается напрямую к бою, либо отображает шипярд
  6. в шипярде в качестве реакции на пункты меню (покупа, продажа, смена корабля и т.п.) к ItemServer посылаются соответствующие запросы и ожидаются ответы
  7. при входе в бой, клиент посылает запрос на разршение входа в ItemServer
    1. ItemServer при получении запроса на бой, проверяет все ли в порядке с кораблем игрока и если все ОК разрешает ему вход иначе посылает его назад в шипярд
  8. клиент, получив одобрение на бой, подключается к tbs (балансер)
    1. балансер, посылает запрос на информацию о текущем корабле игрока в AppServer
    2. далее балансер ожидает остальных игроков для создания полной команды
    3. как только команда будет собрана, посылается запрос к InstanceServer на создание боя с выбранной локацией и списком игроков
      1. InstanceServer посылает в AppServer запрос на резервацию боя
      2. после получения ответа, запускается непосредственно BattleServer локально, передавая ему все необходимые параметры
      3. следом InstanceServer посылает команду на подключение к бою игрока ItemServer'у, который перенаправляет ее уже нужному игроку (т.к. игроки не подключаются к InstanceServer напрямую)
  9. клиент получает команду на подключение к бою, отключается от ItemServer и балансера и подключается к BattleServer
  10. в конце боя, BattleServer отсылает собранную статистику в AppServer
  11. при получении ответа, что статистика получена, BattleServer отсылает команду на обработку статистики в ItemServer
  12. после того, как все сообщения касательно статистики разосланы, сервер BattleServer закрывается
  13. при закрытии BattleServer'а, InstanceServer фиксирует этот момент и посылает в AppServer команду о том, что соответствущий BattleServer закрылся (тоже самое будет при зависании BattleServer)
  14. клиент отключается от боя (с задержкой, заданной в клиенте) и подключается снова к ItemServer
  15. весь процесс повторяется снова