Я работаю над сетевой программой и проектирую сервер Linux с использованием C ++.Это довольно просто для разработки базовой структуры.У меня есть определение пакета с заголовком, который имеет фиксированный размер.
typedef enum{
PACKET_LOGIN_REQ = 1,
PACKET_LOGIN_RES,
PACKET_STORE_REQ,
PACKET_STORE_RES
}PACKET_TYPES;
typedef struct {
PACKET_TYPES type;
short bodySize,
long long deviceId
}HEADER;
.
.
/*more definitions here*/
typedef struct{
HEADER head;
union BODY{
LOGIN_REQ loginReq;
LOGIN_RES loginRes;
.
.
more types
}
}
Всякий раз, когда я добавлял больше типов пакетов, мне приходилось изменять инструкцию switch, чтобы добавлять больше случаев для обработки вновь добавленных пакетов.
Я использую тип объединения, поэтому мне не нужно изменять всю структуру пакета.Вместо этого я могу добавить недавно добавленные типы пакетов в структуру объединения.
Однако, когда я пытаюсь проанализировать необработанные данные для помещения в пакет, используя оператор switch
, я должен каждый раз добавлять каждый оператор switch
.
Я думаю, что это не очень хороший шаблон проектирования, и мне было интересно, как я могу проектировать структуру более гибко.
Есть ли лучший способ справиться с этим (лучший шаблон проектирования)?А как насчет связанных учебников или ссылок?