Конечный автомат - это то, что вы хотите
FSM
Таким образом, вы определяете целую группу состояний, в которых вы можете находиться как получатель или отправитель (бездействующий, connection_phase1, connection_phase2, ожидаемый пакет, ...)
Затем определите все возможные события (приходит пакет1, закрывается сеть, ...)
наконец, у вас есть таблица, в которой говорится: «когда в состоянии x и происходит событие n, делайте функцию и переходите в состояние q» - для каждого состояния и события (многие из них будут нулевыми или дублирующими)
Редактировать - как сделать FSM (черновик)
struct FSMNode
{
int m_nextState;
void (m_func*);
}
FSMNode states[NUMSTATES][NUMEVENTS]=
{ // state 0
{3, bang}, // event 0
{2,wiz},
{1, fertang}
}
{
{1, noop}, // event 0
{1, noop},
{3, ole}
}
.......
FSMNode node = states[mystate][event];
node.m_func(context);
mystate = node.m_nextState;
Я уверен, что это полный неверный синтаксис - но я надеюсь, что вы получите дрейф