X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fprotocol.h;fp=source%2Fnet%2Fprotocol.h;h=5051338f3911558c8e2ee19fe2d0665c0e10eec3;hp=e766733cb6a6373839ecefd32c8e95dd9eb24d52;hb=b451f834a6b5440fb1064cf96c69eb5447ae86cf;hpb=3f46fef7032d97b0dd82971ffece1062fd6b05b8 diff --git a/source/net/protocol.h b/source/net/protocol.h index e766733..5051338 100644 --- a/source/net/protocol.h +++ b/source/net/protocol.h @@ -147,6 +147,7 @@ private: virtual unsigned get_class_id() const = 0; unsigned get_id() const { return id; } virtual std::uint64_t get_hash() const = 0; + virtual const char *deserialize(Variant &, const char *, const char *) const = 0; virtual const char *dispatch(ReceiverBase &, const char *, const char *) const = 0; }; @@ -169,6 +170,7 @@ private: std::uint64_t get_hash() const override { return serializer->get_hash(); } char *serialize(const P &, char *, char *) const; const char *deserialize(P &, const char *, const char *) const; + const char *deserialize(Variant &, const char *, const char *) const override; const char *dispatch(ReceiverBase &, const char *, const char *) const override; }; @@ -431,6 +433,15 @@ const char *Protocol::PacketTypeDef

::deserialize(P &pkt, const char *buf, con return serializer->deserialize(pkt, buf, end); } +template +const char *Protocol::PacketTypeDef

::deserialize(Variant &var_pkt, const char *buf, const char *end) const +{ + P pkt; + const char *ptr = serializer->deserialize(pkt, buf, end); + var_pkt = std::move(pkt); + return ptr; +} + template const char *Protocol::PacketTypeDef

::dispatch(ReceiverBase &rcv, const char *buf, const char *end) const {