Модули в Master Server Toolkit - это функциональные компоненты, которые предоставляют готовую логику для конкретных аспектов многопользовательной игры. Каждый модуль реализует часть функциональности, необходимой для создания многопользовательной игры, и может использоваться независимо или в сочетании с другими модулями.
Фундаментальные компоненты для большинства многопользовательских игр:
- Authentication - Регистрация, вход, управление учетными записями
- Profiles - Хранение и управление профилями игроков
- Rooms - Создание и управление игровыми комнатами
Компоненты для расширения геймплейных возможностей:
- Achievements - Система достижений и наград
- Censor - Фильтрация нежелательного контента
- Chat - Система чата и обмена сообщениями
- Lobbies - Лобби для подготовки к игре
- Matchmaker - Подбор игроков и матчей
- Notification - Пуш-уведомления и оповещения
- Ping - Проверка соединения и замер задержки
- QuestsModule - Система квестов и заданий
- WorldRooms - Постоянные игровые миры
Модули для развертывания и поддержки игровой инфраструктуры:
- Spawner - Динамический запуск игровых серверов
- WebServer - Встроенный HTTP сервер для API и админ-панели
Модули для сбора и анализа данных:
- AnalyticsModule - Сбор и анализ игровых событий
Каждый модуль обычно включает:
-
Серверная часть
- Модуль (
*Module.cs) - Основная логика модуля - Реализация API (
*ModuleServer.cs) - Серверная реализация
- Модуль (
-
Клиентская часть
- Клиентское API (
*ModuleClient.cs) - Интерфейс для клиента - Обработчики событий - Компоненты для реакции на события модуля
- Клиентское API (
-
Общие компоненты
- Пакеты данных (
Packets/*.cs) - Структуры для обмена между клиентом и сервером - Модели данных - Классы, описывающие данные модуля
- Интерфейсы - Контракты для расширения функциональности
- Пакеты данных (
-
Расширения
- Интеграции с другими модулями
- Интеграции с внешними сервисами
Для использования модуля требуется:
-
Подключение на сервере:
// Добавление модуля на сервер var module = server.AddModule<ModuleName>(); // Настройка модуля module.someProperty = value; // Подписка на события module.someEvent += HandleEvent;
-
Использование на клиенте:
// Доступ к клиентскому API var moduleClient = Mst.Client.GetModule<ModuleNameClient>(); // Вызов методов moduleClient.SomeMethod(args, (successful, response) => { // Обработка ответа });
Модули могут взаимодействовать между собой через:
- Прямые зависимости - Явные ссылки на другие модули
- Систему событий - Слабосвязанное взаимодействие через события
- Общий контекст - Доступ к общим данным через MasterServer
Для расширения модуля можно:
-
Наследоваться от базовых классов модуля:
public class CustomAuth : AuthModule { // Расширенная функциональность }
-
Реализовать требуемые интерфейсы:
public class CustomDatabase : IAccountsDatabaseAccessor { // Пользовательская реализация доступа к данным }
-
Подписаться на события модуля:
module.OnSomeEvent += (data) => { // Дополнительная логика при событии };
- Минимализм - Используйте только необходимые модули
- Абстракция - Работайте с модулями через интерфейсы
- Расширяемость - Создавайте наследников для кастомизации
- Слабая связь - Используйте события вместо прямых зависимостей
- Безопасность - Проверяйте все данные на стороне сервера