diff --git a/src/socketio/msgpack_packet.py b/src/socketio/msgpack_packet.py index 2746263..85df97c 100644 --- a/src/socketio/msgpack_packet.py +++ b/src/socketio/msgpack_packet.py @@ -7,12 +7,33 @@ class MsgPackPacket(packet.Packet): def encode(self): """Encode the packet for transmission.""" - return msgpack.dumps(self._to_dict()) + return self._encode() + + def _encode(self, **kwargs): + return _msgpack.dumps(self._to_dict(), **kwargs) def decode(self, encoded_packet): """Decode a transmitted package.""" - decoded = msgpack.loads(encoded_packet) + return self._decode(encoded_packet) + + def _decode(self, encoded_packet, **kwargs): + decoded = msgpack.loads(encoded_packet, **kwargs) self.packet_type = decoded['type'] self.data = decoded.get('data') self.id = decoded.get('id') self.namespace = decoded['nsp'] + + @classmethod + def _configure(cls, *args, **kwargs): + dumps_default = kwargs.pop('dumps_default', None) + ext_hook = kwargs.pop('ext_hook', msgpack.ExtType) + + class ConfiguredMsgPackPacket(cls): + def _encode(self, **kwargs): + kwargs.setdefault('default', dumps_default) + return super()._encode(**kwargs) + def _decode(self, encoded_packet, **kwargs): + kwargs.setdefault('ext_hook', ext_hook) + return super()._decode(encoded_packet, **kwargs) + + return ConfiguredMsgPackPacket \ No newline at end of file