icon

Асинхронный мультиплеер

Модуль для работы с асинхронным мультиплеером из 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);

Функционал с событиями по меткам времени янадекса не реализован.