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;
}