Войти
UnityФорумСеть

Master Server Framework для Unity3D. Opensource сетевое решение

#0
10:17, 25 мар. 2020

Жанр: Фреймворк
На каком движке/конструкторе: Unity3D
В каком пространстве: нет ограничения
Какой вид: нет ограничения
Какие есть похожие решения: Photon, Smartfoxserver и что то в этом духе
Какой Язык Пр. используется: C#
Для какой платформы: Windows, Linux, Mac OSX, Web, Android, iOS проверены
Предоставление исходного кода проекта: Open Source на GitHub
API: Websockets C#, MSF, Terminal
Какой тип лицензии распространения: MIT
Сроки разработки: 2015 год. Продолжалась до начала 2018 года, возобновилась в 2018 году в сентябре
Состав имеющейся команды: 1 человек

Оригинальная последняя версия фреймворка 2.0.4 находится на этой странице GitHub и AssetsStore
Официальный дискорд канал: https://discord.gg/bNFVsp
Обновленная, моя версия 3.+ находится на этой странице GitHub
Unity пакет 3.+ находится на этой странице

По всем вопросам обращайтесь в этой теме или в дискорд Aevien#5815 или в телеграм @aevien_it. Чем смогу, помогу :)

+ Показать

Привет всем! Давно не появлялся на форуме. Очень много работы и семейных обязанностей повлияли на это, 4 детей как никак, 4 кота и жена)).

В свое время разрабатывал игру, которая размещена на этом форуме, но как бывает у некоторых других проектов заморозил его. В общем, о чем это я?

Участвую в команде, которая разрабатывает игру стратегию, являюсь там программистом, одним из немногих. Так вот на мне лежит клиент серверная часть. И вот нашли интересный опенсорсный проект, который работал хорошо, но разработчик тоже скорее всего как и я обзавелся делами более важными чем интересы проекта. Поэтому проект в течение почти 3 лет (на текущий момент) был вообще без движения с его стороны, но я его доработал.  Что уже имеет фреймворк в своем арсенале?

- Система авторизации и регистрации на сервере. Поддержка гостевого входа с последующей регистрацией.
- Система работы с аккаунтами игроков. Вы можете создать связь аккаунтов с социальными сетями, связать их со своими сайтами, администрировать.
- Система работы с профилями игроков. Возможность хранить и обрабатывать игровые данные пользователей прям на мастер-сервере и синхронизировать их с комнатами и игроками в реальном времени. Например, игрок А может подключиться к комнате 1, а игрок Б из комнаты 2 может смотреть его прогресс если они друзья/сокланы.
- Система чатов и чат каналов: приватные чаты между игроками на любых серверах, где бы они не находились. Публичные чаты позволяют общаться всем игрокам на всех серверах и комнатах. Чат каналы, можно использовать для кланов или групп.
- Система создания матчей/комнат. Например, игра Counter Strike. В ней игроки могли создавать игровые матчи/комнаты и подключаться к существующим, созданным кем-то другим.  Система поддерживает региональность, с помощью ее вы можете предоставлять игрокам возможность играть на серверах, находящихся в близи их места проживания.
- Система запуска игровых комнат Spawner. Позволяет администраторам серверов запускать игровые комнаты при помощи системы создания матчей. При этом игровые комнаты могут находиться на внешних серверах, удаленных от самого, мастер-сервера. Используя систему прав, администратор может позволить игрокам запускать экземпляры комнат.
- Система Lobby. Позволяет собирать игроков до подключения к игровой комнате, общаться в чате. Пример Battle Royale игры.
- Система Networking, позволяющая очень просто отправлять любые сетевые сообщения. API написан довольно просто, поэтому создать сетевой геймплей шутера, стратегии, MMORPG и многого другого не составит труда.
- Классы Хелперы, которые тоже помогут очень быстро собрать серверную логику, хотя по умолчанию можно добиться не плохих результатов уже с тем, что фреймворк предоставляет.
- Система выполнения задач в многопоточности, не скажу, что суперкрутая, но справляется со своими задачами. Клиенты и сервер обрабатывают сетевые сообщения до того, как передают их в главный поток Юнити.

При заточке его под игру, в которой я участвую, выяснилось, что в нем есть большинство решений наших задач, но вот многое начато и либо не закончено, либо работает, но сделано по-быстрому. Короче Фреймворк понравился и решил я почистить код в согласии с документированными правилами написания C# программ, внести поправки и дополнения.

Вот некоторые изменения и доработки, которые я сделал примерно за год, работал по 3-5 часов в неделю:

- Обновлена библиотека работы с Веб-сокетами
- Полностью убрана зависимость от uNet. Вы можете использовать любое сетевое решение для Юнити в совокупности с данным фремворком. Вы также можете написать свой транспорт для работы с сетью в MSF.
- Почистил код в модулях и добавил немало изменений и фиксов
- Добавлен модуль HTTPServerModule, который помогает, например, создать панель управления мастер-сервером
- Добавлен модуль CensorModule, из названия видно, что он помогает фильтровать в чатах и других местах нецензурные высказывания
- Добавлен модуль PingModule. чисто для проверки связи с самим мастер-сервером
- Добавлен клиентский базовый класс модуля для работы с клиентскими событиями
- Переделана система EventsChannel, которая позволяет регистрировать события по каналам и отрабатывать их как угодно. В примерах представленных с фреймворком есть демо-сцены.
- В MsfRuntime внесены изменения и доработки, которые позволяют кроссплатформенно получать информацию или выполнять некоторые действия. Пока там мало чего, но уже полезно.
- Добавлен терминал консольных команд, разработка от Stillwwater, можно запускать серверные команды прям из него.
- Добавлен класс DynamicSingleton, позволяющий создавать «синглтон» объекты быстро на лету
- Добавлен класс SimpleNameGenerator для генерации имен игроков. Это не то, чтобы генератор, а маленькая база имен, которая собирает полные имена в согласии с указанным полом
- Добавлен класс Singleton, что-то типа DynamicSingleton только проще
- Создана система UI, которая позволяет работать с компонентами и окнами, а также система валидации компонентов формы. Например, запрет на отправку данных при неправильно введенном адресе эл. почты
- И много других мелочей, все уже и не упомню, так как первичной целью не было делиться с комьюнити

При тестировании на бенчмарке мастер сервер выдерживал спокойно 5000 конкурентных клиентов. Тестирование проводилось выполнением простой задачи. Клиенты массово подключались к мастер-серверу, отправляли 32 байтное сообщение и получали ответ обратно. При этом другие клиенты тоже выполняли подключение и ждали своей очереди для отправки сообщений. Использовал этот бенчмарк https://www.npmjs.com/package/websocket-benchmark.

Я писал первоначальному разработчику и спрашивал его будет ли движение, но он так и не ответил. На оригинальной странице GitHub он дал разрешение делать с Фреймворком все, что вздумается.

Оригинальная последняя версия фреймворка 2.0.4 находится на этой странице: https://github.com/alvyxaz/barebones-masterserver
Официальный дискорд канал: https://discord.gg/bNFVsp
Обновленная, моя версия 2.2.3 и выше, находится на этой странице: https://github.com/aevien/master-server-framework
Unity пакет находится на этой странице: https://aevien.itch.io/master-server-framework

Пользуйтесь на здоровье, пишите в дискорд Aevien#5815, если нужно задавайте вопросы тут или тоже в дискорде.


#1
15:13, 28 мар. 2020

Релиз версии 2.2.3

- BaseClientModule теперь является расширяемым
- Начал работу над демо сценой, которая показывает как работает система создания комнат/матчей
- Фикс багов в классе RegisteredSpawner
- Фикс багов в классе SpawnerController
- Фикс багов в классе SpawnTask
- Фикс багов в классе SpawnerBehaviour
- Фикс багов в классе SpawnersModule

#2
15:06, 31 мар. 2020

Обновление 2.2.4. Перед импортом необходимо полностью удалить старую версию

- RoomServerBehaviour может теперь запускаться как через спаунер, так и как отдельное приложение. Для управления этой функцией используйте поле startRoomAsProcess  в инспекторе
- ConnectionToMaster переименован в ConnectionHelper и теперь может быть расширен и применен в своих целях
- Для быстрого соединения с Мастер-сервером используйте ClientToMasterConnector
- SpawnerController имеет некоторые изменения. Удалены неоправданные статические методы.
- SpawnerBehaviour  также имеет некоторые изменения касательно управления SpawnerController.
- Добавлено дополнительное логирование в классы RoomsModule, SpawnersModule для детального отслеживания процесса создания матчей и комнат.

#3
8:32, 3 апр. 2020

Обновление 2.3.0. Перед импортом необходимо полностью удалить старую версию

- Добавлен интерфейс ISpawnerController
- Класс SpawnerController переписан и дополнен.
- Внесены существенные изменения в класс SpawnerBehaviour, а также добавлены два поля:
-- usePublicIp - поможет использовать публичный IP для комнаты
-- region - поможет устанавливать региональность комнаты через инспектор
- MsfArgs:
-- Добавлена команда StartSpawner, которая поможет запускать спаунер через командную строку
-- Добавлена команда RoomRegion, которая поможет устанавливать региональность через командную строку

#4
4:53, 6 апр. 2020

Обновление 2.3.1. Перед импортом необходимо полностью удалить старую версию

Небольшие фиксы.

-Добавлено свойство Region в класс RoomOptions
-Исправлена ошибка "Error while handling a message from Client. OpCode: 30021, Error: System.InvalidOperationException: The current state of the connection is not Open"

#5
7:31, 9 апр. 2020

Обновление 2.3.2. Перед импортом необходимо полностью удалить старую версию

MsfArgNames:
-SpawnId (-msfSpawnId) переименован в SpawnTaskId (-msfSpawnTaskId)
-SpawnCode(-msfSpawnCode) переименован в SpawnTaskUniqueCode (-msfSpawnTaskUniqueCode)
ClientsSpawnRequestPacket:
-CustomArgs переименован в CustomOptions
-Region удален
SpawnRequestPacket:
-CustomArgs переименован в CustomOptions
-SpawnId переименован в SpawnTaskId
-SpawnCode переименован в SpawnTaskUniqueCode
-Properties переименован в Options
-Исправлены баги с региональность. Теперь если регионне указан, то все комнаты созданные с пустым регионом становятся общими
BaseClientModule переименован в MsfBaseClientModule
-Также теперь этот класс может прослушивать сетевые сообщения

#6
8:18, 11 апр. 2020

Обновление 3.1.0. Внесены значительные изменения, поэтому текущая версия не совместима с ранними. Пожалуйста, тестируйте в новом проекте перед интеграцией в существующий.

- Создан новый класс DictionaryOptions, который помогает работать с свойствами. Этот класс используется во многих производных от ISerializablePacket классах. Примерно 65 позиций, в которых используется новый DictionaryOptions
- Произведено документирование методов, свойств и полей классов, не все, но много. Это поможет легче читать код. Такой метод будет использоваться в дальнейших обновлениях.
- Почти закончена демо сцена работы с Спаунерами. Ее уже можно посмотреть в текущем обновлении.

#7
2:37, 14 апр. 2020

Обновление 3.2.0.

Добавлена функция единовременного входа в систему. Пользователь теперь не обязан вводить свой логин и пароль каждый раз при входе в систему. Это делается единожды и в дальнейшем используется аутентификационный токен. Конечно же это контролируемый процесс и решать использовать или нет эту функцию должен каждый разработчик сам )

Пример использования можно найти в сцене BasicAuthorization в классах AccountManager, MsfAuthClient, AuthModule

#8
10:45, 22 апр. 2020

Обновление 3.3.0.

- Ошибка при использовании Msf.Runtime.ProductKey. Не должна вызываться в конструкторе или в полях
- Удален класс BaseClientModule, вместо него использовать MsfBaseClientModule
- В MsfBaseClientModule добавлен метод отвязывания от слежения сетевых сообщений
- Изменена функция получения IP адреса и полной информации о нем

#9
16:51, 28 апр. 2020

Обновление 3.3.1.

- Исправлены множество багов, выявленных пользователями
- Внесены улучшения

#10
16:49, 6 мая 2020

Обновление 3.4.0.

Добавлены новые функции и интеграция с сетевым решение Mirror построенным на базе Unet. Все нововведения будут описаны позже после полной поддержки Mirror

#11
16:23, 7 мая 2020

Обновление 3.4.1.

Можете протестировать процесс запуска игровых комнат на сетевом решении Mirror. Для этого созданы сцены демонстрирующие как это сделать.

#12
17:49, 9 мая 2020

Обновление 3.5.0.

Добавлена основная поддержка Mirror

MirrorRoomManager -  управляет комнатой на стороне сервера и клиента
MirrorRoomServer - серверная часть игровой комнаты
MirrorRoomClient - клиентская часть игровой комнаты
MirrorRoomPlayer - содержит информацию о игроке

В IAccountsDatabaseAccessor добавлены асинхронные методы

void GetAccountByUsernameAsync(string username, GetAccountCallback callback)
void GetAccountByTokenAsync(string token, GetAccountCallback callback)
void GetAccountByEmailAsync(string email, GetAccountCallback callback)
void SavePasswordResetCodeAsync(IAccountInfoData account, string code, Action<string> callback)
void GetPasswordResetDataAsync(string email, GetPasswordResetCallback callback)
void SaveEmailConfirmationCodeAsync(string email, string code, Action<string> callback)
void GetEmailConfirmationCodeAsync(string email, GetEmailConfirmationCodeCallback callback)
void UpdateAccountAsync(IAccountInfoData account, Action<string> callback)
void InsertNewAccountAsync(IAccountInfoData account, Action<string> callback)
void InsertTokenAsync(IAccountInfoData account, string token, Action<string> callback)

Решена проблема с токеном авторизации, когда гость входит в систему остается пустой токен авторизации и при повторной попытке входа по токену выходит ошибка.

#13
6:53, 11 мая 2020

Обновление 3.5.1.

- Исправлены баги и ошибки

#14
14:16, 12 мая 2020

Обновление 3.5.3.

[Mirror]

- Баг при потере соединения с комнатой игрок оставался в комнате. хотя должен отправляться в офлайн сцену. Исправлен, теперь отключение от комнаты происходит корректно
- Внесены изменения в модуль Лобби
- Другие мелкие фиксы

UnityФорумСеть

Тема в архиве.