Быстрый старт · Документация · Shardy · Пример сервиса · Отчёт об ошибке
Это Unity клиент для Shardy. Он предоставляет RPC-фреймворк с простым и удобным API: запросы, команды и подписки для взаимодействия с Shardy-сервисами.
Shardy – это фреймворк для онлайн игр и приложений на Node.js. Он предоставляет базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т.п.
- Простой API: запросы, команды, подписки и т.п.
- Транспорт данных через сокеты и вебсокеты
- iOS, Android и WebGL поддержка
- Легкий и быстрый
- Поддержка пользовательской сериализации
- Поддержка пользовательской валидации рукопожатий (handshake)
- Настраиваемый heartbeat для соединения
- Справочные материалы: документация, сниппеты, примеры
- Не используются сторонние библиотеки
Скачайте пакет со страницы релизов или добавьте строчку ниже в ваш файл Packages/manifest.json
и пакет будет установлен по адресу Git репозитория:
"com.mopsicus.shardy": "https://github.com/mopsicus/shardy-unity.git",
Настройте своё окружение для локальной разработки для удобства и "синхронизации" с текущим проектом. Так как Unity клиент для Shardy разрабатывается с использованием редактора VS Code, то все настройки и рекомендации предложены для него.
- Используйте
Monokai Pro
илиeppz!
тему - Используйте
FiraCode
шрифт - Установите расширения:
- C#
- C# Dev Kit
- Unity
- Включите
Inlay Hints
в настройках C# расширения - Установить пакет
Visual Studio Editor
в редакторе Unity - Поместите файл
.editorconfig
в корневую папку проекта - Ура!
Посмотрите раздел с примерами и скачайте демо приложение. Это демо покажет вам как использовать методы клиента и какие есть опции. Если вы хотите использовать для тестов собственный backend, посмотрите как установить и запустить пример сервиса.
Протестировано в Unity 2022.3.x, Android, iOS и WebGL.
Также, из раздела с примерами вы можете взять демо клиента для многопользовательской онлайн игры Крестики-Нолики. Изучите пример чтобы понять, как работает клиент-серверное взаимодействие и как начать разрабатывать свою собственную онлайн игру, или как добавить мультиплеер в уже существующую.
Посмотрите пример сервера для игры Крестики-Нолики. Скачайте, изучите и протестируйте простой игровой сервер сделанный на Shardy.
Главное отличие между запросами и командами – серверная сторона должна ответить на запрос и не должна на команду. Это означает, что когда вы делаете запрос, у вас есть функция обратного вызова (callback) и когда сервер ответит, в неё придёт результат. Когда вы отправляете команду, то вы просто "информируете" сервер о чём-то.
Запрос:
_client.Request("test", (data) => {
Console.WriteLine($"received test data: ${data.ToString()}");
});
Команда:
_client.Command("start");
Подписка:
_client.On("lookup", (data) => {
Console.WriteLine($"received lookup data: ${data.ToString()}");
});
Подписка на запрос с сервера:
_client.OnRequest(request, (payload) => {
Console.WriteLine($"received request data: ${payload.ToString()}");
// если закомментировать строку ниже, вы получите таймаут на сервере
_client.Response(payload, Encoding.UTF8.GetBytes("some_data_from_client"));
});
Когда клиент подключается к серверу, он должен успешно завершить рукопожатие (handshake) перед началом работы. В Shardy используется двухэтапное рукопожатие для соединений.
Этапы рукопожатия:
- Клиент отправляет данные рукопожатия на сервер
- Сервер получает и проверяет их:
- Отравляет подтверждение клиенту
- Отключает клиента, если проверка не прошла
- Клиент получает данные подтверждения и тоже проверяет их:
- Отправляет ответ на подтверждение серверу
- Отключается, если проверка не прошла
- После успешного рукопожатия и подтверждения, клиент и сервер могут отправлять друг другу запросы и команды.
Если в вашей реализации нет необходимости делать двухэтапное рукопожатие, вы можете установить "заглушки" на этих методах.
Shardy предоставляет интерфейс для валидации рукопожатия. Вы можете реализовать собственную структуру данных рукопожатия и валидацию для всех этих этапов. Создайте свой класс с валидатором, релизуйте интерфейс IValidator
и передайте его в конструктор клиента.
using Shardy;
class MyHandshake : IValidator {
public ValidatorState VerifyAcknowledgement(byte[] body) {
// vefify acknowledgement data
}
public byte[] Handshake(byte[] body = null) {
// data for initial handshake
}
public byte[] Acknowledgement(byte[] body) {
// data for acknowledgement after handshake validation passed
}
}
Shardy поддерживает пользовательскую сериализацию передаваемых данных. Вы можете использовать JSON, MessagePack, Protobuf, FlatBuffers и т.д. или свой собственный сериализатор.
Создайте свой класс с сериализатором, релизуйте интерфейс ISerializer
и передайте его в конструктор клиента.
using Shardy;
class MyJsonSerializer : ISerializer {
public byte[] Encode(PayloadData body) {
// encode PayloadData to byte array for transporting
}
public PayloadData Decode(byte[] body) {
// decode recevied data and serialize to PayloadData
}
}
Смотрите документацию с информацией о всех классах и методах.
Мы приглашаем вас внести свой вклад и помочь улучшить Unity клиент для Shardy. Пожалуйста, ознакомьтесь с документом. 🤗
Вы также можете внести свой вклад в проект Shardy:
- Помогая другим пользователям
- Мониторя список существующих проблем
- Рассказав о проекте в своих соцсетях
- Используя его в своих проектах
Вы можете поддержать проект любым из способов ниже:
- Bitcoin (BTC): 1VccPXdHeiUofzEj4hPfvVbdnzoKkX8TJ
- USDT (TRC20): TMHacMp461jHH2SHJQn8VkzCPNEMrFno7m
- TON: UQDVp346KxR6XxFeYc3ksZ_jOuYjztg7b4lEs6ulEWYmJb0f
- Карты Visa, Mastercard через Boosty
- Карты МИР через CloudTips
Перед тем как задать вопрос, лучшим решением будет посмотреть уже существующие проблемы, это может помочь. В любом случае, вы можете задать любой вопрос или отправить предложение по email или Telegram.
Unity клиент для Shardy выпущен под лицензией MIT. Используйте бесплатно и радуйтесь. 🎉