- const PacketDefBase &pdef = get_packet_by_id(header.type);
- const char *ptr = pdef.dispatch(rcv, buf, buf+header.length);
+ const PacketDefBase &pdef = get_packet_by_id(header.type-base_id);
+ 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);