Доброго времени суток.
Постараюсь максимально подробно описать ситуацию. Есть клиент-серверное приложение. Общение между клиентом и сервером происходит посредством сообщений, но количество их разновидностей очень велико. Дело в том, что сервер должен обрабатывать множество разных запросов от клиента, которые различаются как количеством аргументов, так и их типами.
Я пробовал писать в стиле С. То есть написать несколько enum-ов и проверять с их помощью всевозможные вариации сообщения. Но это оказалось очень неудобно. Немного поразмыслив решил что этот способ мне не подходит, наверняка есть что-то более удобное и практичное.
Потом мне в голову пришла мысль написать базовый класс сообщения, от которого наследовать все другие сообщения разных типов. Что то типа
QNetMessage -> {QFirstTypeMessage, QSecondTypeMessage ...}
Такой подход мне нравиться куда больше. Но проблема вот в чем: как мне на другом конце определить тип сообщения? Хочется что-то типа полиморфизма. Ну к примеру:
C++ (Qt)
if (message && message->type() == QNetMessage::MT_FirstTypeMessage){
QFirstTypeMessage *message = static_cast<QFirstTypeMessage *>(message);
// parsing
// ...
}
Данные приходят в бинарном виде, а это значит, что если клиентом было передано QFirstTypeMessage, а на сервере прочитано QNetMessage, то - данные потеряны.
Как мне реализовать корректную передачу сообщения? Или может быть будут другие мысли?
В любом случае спасибо.