Я написал несколько сетевых систем и хорошо знаю, как работает сеть. Однако я всегда получаю функцию приема пакетов, которая является гигантским оператором switch. Это начинает добираться до меня. Я бы предпочел неплохой элегантный объектно-ориентированный способ обработки принимающих пакетов, но каждый раз, когда я пытаюсь найти хорошее решение, я всегда заканчиваю короткое замыкание.
Например, скажем, у вас есть сетевой сервер. Он просто ждет ответа. Пакет входит, и серверу необходимо проверить пакет, а затем ему нужно решить, как его обрабатывать.
В данный момент я делаю это, включив идентификатор пакета в заголовке и затем имея огромную совокупность вызовов функций, которые обрабатывают каждый тип пакета. Со сложными сетевыми системами это приводит к монолитной инструкции switch, и мне действительно не нравится обрабатывать ее таким образом. Один из способов, который я рассмотрел, - использовать карту классов обработчиков. Затем я могу передать пакет соответствующему классу и обработать входящие данные. Проблема с этим заключается в том, что мне нужно каким-то образом "зарегистрировать" каждый обработчик пакетов с помощью карты. Это означает, что, как правило, мне нужно создать статическую копию класса, а затем в конструкторе зарегистрировать его с помощью центрального обработчика пакетов. В то время как это работает, это действительно похоже на неэлегантный и неудобный способ обработки.
Изменить. Точно так же идеально было бы иметь приятную систему, которая работает в обоих направлениях. т.е. структуру класса, которая легко обрабатывает отправку тех же типов пакетов, что и их получение (с помощью различных функций).
Может ли кто-нибудь указать мне на лучший способ обработки входящих пакетов? Ссылки и полезная информация очень ценятся!
Извините, если я не описал свою проблему хорошо, так как моя неспособность описать ее хорошо также является причиной, по которой мне никогда не удавалось найти решение.