Master Server Framework
| |
Aevien | Дата: Суббота, 28 Марта 2020, 15:38 | Сообщение # 1 |
почти ветеран
Сейчас нет на сайте
| Жанр: Фреймворк На каком движке/конструкторе: 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 он дал разрешение делать с Фреймворком все, что вздумается.
Пользуйтесь на здоровье, пишите в дискорд Aevien#5815, если нужно задавайте вопросы тут или тоже в дискорде.
Добавлено (31 Марта 2020, 15:04) --------------------------------------------- Обновление 2.2.4. Перед импортом необходимо полностью удалить старую версию
- RoomServerBehaviour может теперь запускаться как через спаунер, так и как отдельное приложение. Для управления этой функцией используйте поле startRoomAsProcess в инспекторе - ConnectionToMaster переименован в ConnectionHelper и теперь может быть расширен и применен в своих целях - Для быстрого соединения с Мастер-сервером используйте ClientToMasterConnector - SpawnerController имеет некоторые изменения. Удалены неоправданные статические методы. - SpawnerBehaviour также имеет некоторые изменения касательно управления SpawnerController. - Добавлено дополнительное логирование в классы RoomsModule, SpawnersModule для детального отслеживания процесса создания матчей и комнат.
Добавлено (03 Апреля 2020, 08:26) --------------------------------------------- Обновление 2.3.0. Перед импортом необходимо полностью удалить старую версию
- Добавлен интерфейс ISpawnerController - Класс SpawnerController переписан и дополнен. - Внесены существенные изменения в класс SpawnerBehaviour, а также добавлены два поля -- usePublicIp - поможет использовать публичный IP для комнаты -- region - поможет устанавливать региональность комнаты через инспектор - MsfArgs -- Добавлена команда StartSpawner, которая поможет запускать спаунер через командную строку -- Добавлена команда RoomRegion, которая поможет устанавливать региональность через командную строку
Добавлено (06 Апреля 2020, 04:48) --------------------------------------------- Обновление 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"
Добавлено (09 Апреля 2020, 07:31) --------------------------------------------- Обновление 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 -Также теперь этот класс может прослушивать сетевые сообщения
Сообщение отредактировал Aevien - Пятница, 08 Мая 2020, 03:51 |
|
| |
drcrack | Дата: Четверг, 09 Апреля 2020, 08:36 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Тебе самому не кажется что в минорном обновлении не должно быть изменений, который требуют удалить старую версию и ломают существующий код из-за переименований?
Напоминает SRP от Unity, каждый месяц с новой обновой что-то отваливается
Не только лишь все могут в обратную совместимость, мало кто может это делать
|
|
| |
Aevien | Дата: Четверг, 09 Апреля 2020, 11:33 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Да, кстати! Ты прав! Неправильно указал версионность. 2.4.0 должна быть как минимум или 3.0. Впредь буду внимателен.
Что касается изменения имен, то первичный разработчик указал в разных классах, взаимодействующих друг с другом нелогическое именование свойств и полей. Программа трудно понималась. Поэтому пришлось почистить код в этом направлении. Там еще много такого будет измененено.
Спасибо!
Добавлено (11 Апреля 2020, 08:17) --------------------------------------------- Обновление 3.1.0. Внесены значительные изменения, поэтому текущая версия не совместима с ранними. Пожалуйста, тестируйте в новом проекте перед интеграцией в существующий.
- Создан новый класс DictionaryOptions, который помогает работать с свойствами. Этот класс используется во многих производных от ISerializablePacket классах. Примерно 65 позиций, в которых используется новый DictionaryOptions - Произведено документирование методов, свойств и полей классов, не все, но много. Это поможет легче читать код. Такой метод будет использоваться в дальнейших обновлениях. - Почти закончена демо сцена работы с Спаунерами. Ее уже можно посмотреть в текущем обновлении.Добавлено (14 Апреля 2020, 02:34) --------------------------------------------- Обновление 3.2.0.
Добавлена функция единовременного входа в систему. Пользователь теперь не обязан вводить свой логин и пароль каждый раз при входе в систему. Это делается единожды и в дальнейшем используется аутентификационный токен. Конечно же это контролируемый процесс и решать использовать или нет эту функцию должен каждый разработчик сам )
Пример использования можно найти в сцене BasicAuthorization в классах AccountManager, MsfAuthClient, AuthModule Добавлено (22 Апреля 2020, 10:44) --------------------------------------------- Обновление 3.3.0.
- Ошибка при использовании Msf.Runtime.ProductKey. Не должна вызываться в конструкторе или в полях - Удален класс BaseClientModule, вместо него использовать MsfBaseClientModule - В MsfBaseClientModule добавлен метод отвязывания от слежения сетевых сообщений - Изменена функция получения IP адреса и полной информации о нем Добавлено (28 Апреля 2020, 16:51) --------------------------------------------- Обновление 3.3.1.
- Исправлены множество багов, выявленных пользователями - Внесены улучшения Добавлено (06 Мая 2020, 16:46) --------------------------------------------- Обновление 3.4.0.
Добавлены новые функции и интеграция с сетевым решение Mirror построенным на базе Unet. Все нововведения будут описаны позже после полной поддержки Mirror Добавлено (07 Мая 2020, 16:23) --------------------------------------------- Обновление 3.4.1.
Можете протестировать процесс запуска игровых комнат на сетевом решении Mirror. Для этого созданы сцены демонстрирующие как это сделать. Добавлено (09 Мая 2020, 17:47) --------------------------------------------- Обновление 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)
Решена проблема с токеном авторизации, когда гость входит в систему остается пустой токен авторизации и при повторной попытке входа по токену выходит ошибка. Добавлено (11 Мая 2020, 06:52) --------------------------------------------- Обновление 3.5.1.
- Исправлены баги и ошибки Добавлено (12 Мая 2020, 14:15) --------------------------------------------- Обновление 3.5.3.
[Mirror]
- Баг при потере соединения с комнатой игрок оставался в комнате. хотя должен отправляться в офлайн сцену. Исправлен, теперь отключение от комнаты происходит корректно - Внесены изменения в модуль Лобби - Другие мелкие фиксы
Сообщение отредактировал Aevien - Суббота, 11 Апреля 2020, 08:17 |
|
| |
Storm54 | Дата: Вторник, 12 Мая 2020, 19:32 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Кому этот framework нужен? Профессиональные разработчики напишут с нуля под свои требования. Новичкам лучше подойдет любое популярное и проверенное решение, коих накопилось уже достаточно.
|
|
| |
Aevien | Дата: Среда, 13 Мая 2020, 10:57 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| Storm54, кому нужен, тот уже скачал 219 раз и задают вопросы в дискорд или при личном созвоне, даже из заграницы. Кому не нужен берут, как вы сказали, популярные решения.
- Кому нужен человек, у которого более 10 лет опыта разработки на разных языках высокого уровня? - Кому нужен человек, у которого отличные знания .NET, Unity? - Кому нужен человек, у которого отличные знания TCP, UDP? - Кому нужен человек, который пишет в своей подписи о достижениях?
Вопросы были заданы не чтобы потроллить, а дать понять, что как и вы пишите о своих достижениях и рады дать любую консультацию по теме геймдева, так и я готов поделиться тем, над чем работаю. Все очень просто
Сообщение отредактировал Aevien - Среда, 13 Мая 2020, 10:59 |
|
| |
|