Ich kenn die Lib nicht, vielleicht hilft dir jedoch dieser Ansatz.
Damit du weißt welches Paket (Typ) ankommt, sollte ein Teil des Headers das Paket beschreiben. (1 Byte, 2 Byte,.. je nach Gesamtpaket Anzahl)
Wenn du diese Bytes ausgelesen hast, weißt du welches Paket die folgenden Daten (Bytestream) erhält.
Das ganze kannst du einfach mit einem if, else, switch, case lösen. Oder elegant mit Reflection. (C#)
Jedes "Paket" wird durch eine Klasse dargestellt. Jede Klasse erhält ein Klassenattribut mit dem Pakettyp.
(Damit per Reflection während der Laufzeit alle KlassenAttribute mit dem Pakettyp verglichen werden können. Anschließend wird automatisch die richtige Klasseninstanz geliefert)
Durch eine Vererbungsstruktur z.B Message -> RequestPacket -> Packet können Methoden wie "ReadPacket" und "WritePacket" verallgemeinert und im Sohn "Message" realisiert werden.
Ich hoffe ich konnte mich verständlich ausdrücken und dir weiterhelfen