
Содержание
Асинхронный мультиплеер
Модуль для работы с асинхронным мультиплеером из SDK Yandex Games.
Разработан и протестирован участником Telegram-сообщества.
Реализован доступ к основной части API и симуляция для Unity Editor.Добавляет статический класс
MultiplayerSessions с методами Init, Commit, Push и событием onSessionsLoaded.
Payload
Для передачи данных создайте класс с переменными в пространстве имён YG.
namespace YG
{
public partial class Payload
{
public string myText;
}
}
Инициализация и загрузка сессий
Подпишитесь на событие onSessionsLoaded, принимающее List<Session>.
Метод Init вызывается 1 раз перед началом игры. Принимает InitConfig:
meta— объектMetaFilterс 3 фильтрами (meta1,meta2,meta3).- Каждый фильтр —
YG.Range(min, max). - Если
min = 0иmax = 0, фильтр игнорируется. - Пример: для поиска записей с
meta1равных 2 укажитеrange(1, 3).
- Каждый фильтр —
count— количество возвращаемых записей (до 10 по лимиту Yandex).
YG2.MultiplayerSessions.onSessionsLoaded += OnSessionsLoaded;
var config = new InitConfig();
var meta = new MetaFilter();
long lvlMax = mylvl + 1;
long lvlMin = mylvl - 1;
YG.Range range = new YG.Range(lvlMin, lvlMax);
meta.meta1 = range;
config.meta = meta;
config.count = 1;
YG2.MultiplayerSessions.Init(config);
Обработчик события:
private void OnSessionsLoaded(List<Session> sessions)
{
if (sessions == null ||
sessions.Count == 0 ||
sessions[0] == null ||
sessions[0].timeline == null ||
sessions[0].timeline.Count == 0 ||
sessions[0].timeline[0] == null ||
sessions[0].timeline[0].payload == null ||
string.IsNullOrEmpty(sessions[0].timeline[0].payload.myText))
{
return;
}
oldValues = sessions[0].timeline[0].payload.myText;
}
Запись и отправка данных
Commit(Payload)— добавляет кадр с данными (автоматически формирует timeline по SDK Yandex).Push(Meta)— отправляет на сервер.Metaсодержит 3 поляmeta1,meta2,meta3(типlong, диапазон от –9223372036854775295 до +9223372036854775295, по умолчанию 0).
var meta = new Meta();
var payload = new Payload();
payload.myText = newSesion;
meta.meta1 = (long)levelModel.CurrentLevel.Id;
YG2.MultiplayerSessions.Commit(payload);
YG2.MultiplayerSessions.Push(meta);
Функционал с событиями по меткам времени янадекса не реализован.