Пятница, 22 Ноября 2024, 23:31

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг