GG Chat Proto v4 - GoodGame/API GitHub Wiki

Протокол асинхронного взаимодействия между клиентом и сервером для чата GG v4

Четвертая версия протокола реализует взаимодействие клиент-сервер поверх Web Application Messaging Protocol http://wamp-proto.org/

В ответах от сервера используется 4 базовые структуры: ChatRoom, ChatMessage, ChatUser, ChatUserSettings Структура данных

1. Подключение к серверу и получение сессии:

Здесь и далее в качестве примера будет приводится код с использованием библиотеки Autobahn|JS.

Подключение без авторизации:

var session;
var connection = new autobahn.Connection({
    url: '<CONNECTION_URL>', 
    realm: 'realm1'
});
connection.onopen = (sess) => session = sess;

Подключение с авторизацией:


var userId = 1;
var userToken = 'USERTOKEN';

var session;
var connection = new autobahn.Connection({
    url: '<CONNECTION_URL>', 
    realm: 'realm1',
    authmethods: ["ticket"],
    authid: 1,
    onchallenge: (session, method, extra) => 
        method === "ticket" ? userToken : false;
});
connection.onopen = (sess) => session = sess;

2. Получение новых сообщений:

Если вы хотите просто получать новые сообщения, то вам достаточно подписаться на необходимый pub/sub канал. Авторизация не обязательна. Для каждого нового сообщения автоматически будет вызываться callback-функция.

session.subscribe('gg.chat.{roomId}.messages', (args) => {
   console.log(args[0]); // ChatMessage
})

Где roomId - уникальный идентификатор комнаты. Для стримов id комнаты совпадает с id канала.

3. История сообщений

Запрос истории сообщений осуществляется вызовом метода get_history:

session.call('gg.chat.get_history', [roomId]).then(messages => {
    console.log("Result:", messages); // [ChatMessage, ...]
})

4. Запрос списка пользователей канала

session.call('gg.chat.users_list', [roomId]).then(data => {
    console.log("Result:", data); // [ChatUser, ...]
})

5. Подключение к комнате

Для взаимодействия с чатом (отправка сообщений, голосования, модерация и тд) необходимо подключиться к нужной комнате. В ответ сервер вернет информацию о комнате и пользователе.

session.call('gg.chat.join', [roomId]).then(data => {
    console.log("Result:", data); // ChatRoom
})

6. Отправка сообщения

Для того, чтобы отправлять сообщения в чат, необходима авторизация и подключение к комнате.

session.call('gg.chat.send_message', [msg]).then(data => {
    console.log("Result:", data); // {success: true, error: ""}
})

Где msg - объект типа ChatMessage