Протокол взаимодействия с Игровым сервером - VladimirKhil/SI GitHub Wiki
Подключение
- Необходимо определить адрес сервера для подключения. Для этого следует сделать GET-запрос по предопределённому адресу:
https://vladimirkhil.com/api/si/servers
. В ответ на этот запрос возвращается массив объектов, каждый из которых содержит два поля: uri - адрес сервера для подключения - и protocolVersion - версию протокола сервера. В текущей реализации версия протокола сервера равна 1. В дальнейшем планируется повышать это значение и описывать нововведения в протоколе. Клиенту следует подключаться только к серверу с поддерживаемой им версией протокола. - Далее следует подключиться к выбранному серверу и пройти аутентфикацию, выполнив POST-запрос по адресу:
{serverUri}/api/Account/LogOn
. Необходимо передать параметры login и password для аутентификации. В текущей версии сервера пароль задаётся пустым. В случае успешной аутентификации сервер пришлёт куки для создания сессии, а также токен одноразового входа (token). - Наконец следует установить 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 | Произошёл разрыв соединения с игрой по причине кика/бана текущего пользователя |