Реализация для адресной отправки сетевых сообщений между клиентом и сервисом посредством Mirror, для решения проблемы при получении сообщения без зарегистрированного обработчика.
Зависимости:
- Unity 2022.3.62f3
- Mirror Networking 96.0.1
- VContainer 1.19.0
Вводим служебное сообщение SubscriptionStateMessage
для подтверждения локальной регистрации обработчика на стороне клиента. Сервис хранит и обрабатывает реестр подписчиков и рассылает
сообщения HelloMessage только тем подключениям которые присутствуют
в этой коллекции. За счет этого обеспечивается отправка сообщений только подтвержденным клиентам.
Для идентификации сообщений на сервере и клиенте введена структура NetworkMessageID.
Она генерирует стабильный хэш посредством библиотеки Mirror.
Networking - Содержит регистрацию зависимостей на сцене и запуска клиента и сервиса;
Networking.Shared - Общая логика, структуры для клиента и сервиса;
Networking.Service - Логика обработки подписок сервисом;
Networking.Client - Логика обработки подписок клиентом.
- Запустить сервер или хост;
- Подключить клиента;
- После подключения на стороне клиента произойдет подписка на обработку сообщений типа
HelloMessageи отправка сообщенияSubscriptionStateMessageна сервис; - После получения подтверждения от клиента сервис обработает сообщение
SubscriptionStateMessageи и добавит идентификатор подключения в реестр подписчиков; - После регистрации подписчика сервис отправит сообщение
HelloMessageна клиента; - После получения сообщения клиентом будет произведен вывод в консоль
Hello Client!.