sfreaky
@sfreaky
Начинающий веб и софт разработчик

Как организовать обработку сообщений на сервере?

Разрабатываю игру наподобие HearthStone на c#. Сервер на TCPClient. На данном этапе пытаюсь организовать обработку сообщений. Между клиентом и сервером ходит закодированный в json класс Message
public class Message
    {
        public MessageContent Content { get; set; }
        public Encoding Encoding { get; set; }
        public int BufferLengthSize { get; set; }
        public Type Type { get; set; }
    }

MessageContent, собственно и есть содержимое, которое нужно обработать, есть различные типы сообщений, например AttackMessage
public class AttackMessage : MessageContent
    {
        public int AtackCartId { get; set; }
        public int AttackedCartId { get; set; }
    }

Сейчас идея такова, с помощью контейнера зависимостей, регистрирую именованные привязки
container.RegisterType<IController, AttackMessageController>(nameof(AttackMessage));

И в едином обработчике сообщений в зависимости, от типа содержимого, вызываю нужный контроллер
var controller = container.Resolve<IController>(response.Type.Name);

И формирую ответ
var response  = controller.GetResponse(response.Content)

Оправданно ли для этого использовать контейнер зависимостей, или есть более практичное решение?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
lam0x86
@lam0x86
Если у вас используется отдельный контейнер для контроллеров, то такое решение возможно, но по факту контейнер может быть заменён обычным Dictionary<Type, IController>.
Если же вы регистрируете свои контроллеры в общем контейнере - это выглядит странно.

И в целом, структура класса Message вызывает сомнение. Зачем Encoding и BufferLengthSize? Почему Type имеет тип System.Type, а не System.String?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы