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