Протокол взаимодействия с Игровым сервером - VladimirKhil/SI GitHub Wiki

Подключение

  1. Необходимо определить адрес сервера для подключения. Для этого следует сделать GET-запрос по предопределённому адресу: https://vladimirkhil.com/api/si/servers. В ответ на этот запрос возвращается массив объектов, каждый из которых содержит два поля: uri - адрес сервера для подключения - и protocolVersion - версию протокола сервера. В текущей реализации версия протокола сервера равна 1. В дальнейшем планируется повышать это значение и описывать нововведения в протоколе. Клиенту следует подключаться только к серверу с поддерживаемой им версией протокола.
  2. Далее следует подключиться к выбранному серверу и пройти аутентфикацию, выполнив POST-запрос по адресу: {serverUri}/api/Account/LogOn. Необходимо передать параметры login и password для аутентификации. В текущей версии сервера пароль задаётся пустым. В случае успешной аутентификации сервер пришлёт куки для создания сессии, а также токен одноразового входа (token).
  3. Наконец следует установить SignalR-соединение с сервером по адресу: {serverUri}/sionline?token={token} Всё дальнейшее взаимодействие с сервером (за исключением отправки файлов) происходит по протоколу SignalR.

Отправка файлов

Запрос Параметры Заголовки Описание
POST {serverUri}/api/upload/package FormData файл пакета {name: 'file', fileName: {имя файла пакета} Content-MD5: {MD5-хэш файла пакета} Отправить пакет на сервер
POST {serverUri}/api/upload/image FormData файл аватара {name: 'file', fileName: {имя файла аватара} Content-MD5: {MD5-хэш файла аватара} Отправить аватар на сервер

Протокол коммуникации SignalR

Запросы

Запрос Параметры Описание
GetComputerAccounts Получить список предопределённых компьютерных аккаунтов
GetGamesHostInfo Получить базовую информацию о хосте
GetGamesSlice fromId Получить фрагмент списка запущенных игр, начиная с идентификатора fromId (игр много, и поэтому список грузится фрагментами). Фильтрация списка игр осуществляется на клиенте
GetUsers Получить список активных пользователей
GetNews Получить новости
Say text Отправить сообщение в чат
CreateAndJoinGameNew gameSettings, packageKey, [], isMale Создать новую игру и сразу же войти в неё
CreateAutomaticGameNew login, isMale Создать автоматическую игру и подключиться к ней
JoinGameNew gameId, role, isMale, password Подключиться к существующей игре
HasPackage packageKey Проверить наличие пакета на сервере по ключу
HasPicture pictureKey Проверить наличие аватара на сервере по ключу
SendMessage message Отправить внутриигровое сообщение (см. протокол SIGame)
LeaveGame Покинуть игру и вернуться в лобби
LogOut Закончить сессию с сервером

События

Событие Параметры Описание
Joined login Пользователь {login} вошёл в лобби
Leaved login Пользователь {login} вышел из лобби
Say name, text Пользователь {name} написал в чат {text}
GameCreated game Создана новая игра
GameChanged game Состояние игры изменилось
GameDeleted id Игра удалена
Receive message Получено внутриигровое сообщение (см. протокол SIGame)
Disconnect Произошёл разрыв соединения с игрой по причине кика/бана текущего пользователя