namespace Msp {
namespace Net {
-Protocol::Protocol(unsigned npi):
- header_def(0),
- next_packet_id(npi)
+Protocol::Protocol():
+ header_def(0)
{
PacketDefBuilder<PacketHeader, Serializer<PacketHeader>>(*this, header_def, Serializer<PacketHeader>())
.fields(&PacketHeader::type, &PacketHeader::length);
if(header.length>size)
throw bad_packet("truncated");
const PacketDefBase &pdef = get_packet_by_id(header.type-base_id);
- ptr = pdef.dispatch(rcv, ptr, ptr+header.length);
+ if(DynamicReceiver *drcv = dynamic_cast<DynamicReceiver *>(&rcv))
+ {
+ Variant pkt;
+ ptr = pdef.deserialize(pkt, ptr, ptr+header.length);
+ drcv->receive(pdef.get_id(), pkt);
+ }
+ else
+ ptr = pdef.dispatch(rcv, ptr, ptr+header.length);
return ptr-buf;
}