Я работал над маленькой игрой только для обучения.
Цель игры заключается в том, что она будет в сети, но у меня возникли проблемы с сериализацией команд, отправляемых с сервера на клиент.
Есть много разных команд, которые можно отправить, и ручная обработка сводит меня с ума. На данный момент я использую множество «если» для этого, но я надеюсь, что есть шаблон проектирования, который поможет.
Я хотел бы распаковать сообщение в различные типы объектов, чтобы я мог получить их из какой-то очереди и эффективно обработать их … Но я хотел бы сделать это частично или полностью автоматически.
Есть ли хорошая практика для решения такого рода проблем? Было бы хорошо, если бы это было эффективно.
Заранее спасибо.
PS: Хотя это концептуальный вопрос, я использую C ++, поэтому некоторые конкретные решения тоже подойдут.
Попробуйте Фабричный образец. Что-то вдоль этих линий полезная заводская модель
Создайте базовый класс, который предоставляет методы для сериализации и десериализации данных из потока, и зарегистрируйте ваши производные типы по имени или некоторому другому идентификатору в фабрике.
Вы можете упаковать команду в пакет с заголовком, который сообщает получателю, какой тип создать. Когда вы читаете команду, вы просите фабрику создать правильный тип. Затем возвращаемый тип может быть вызван для десериализации его данных.
Здесь я предполагаю, что некоторые команды имеют дополнительные данные.
После того, как вы выдвинули команду из очереди для обработки, вы можете вызвать ее метод «Выполнить».
Существует шаблон дизайна под названием «актеры», который может быть тем, что вы хотите. Особенности:
естественная и упрощенная модель параллелизма.
может использоваться вместе с сопоставлением с шаблоном по сообщениям (исключить «если»).
Язык ‘scala’ обеспечивает хорошую поддержку для этого шаблона проектирования и идеально соответствует вашим потребностям. Однако я не знаю, есть ли подобное решение в C ++.