FORMAT = '>6s' def encode(self, is_originating, uri, args=None, kwargs=None): # Autobahn wants to send custom payload: convert to an instance # of EncodedPayload payload = struct.pack(self.FORMAT, args[0]) return EncodedPayload(payload, u'mqtt') def decode(self, is_originating, uri, encoded_payload): # Autobahn has received a custom payload. # convert it into a tuple: (uri, args, kwargs) return uri, struct.unpack(self.FORMAT, encoded_payload.payload), None # we need to register our codec! IPayloadCodec.register(CodecMqtt) class MySession(ApplicationSession): def __init__(self, config): ApplicationSession.__init__(self, config) self.init() def init(self): self.mensagem = b'default' @inlineCallbacks def onJoin(self, details): self.log.info('session joined: {details}', details=details) # this is the one and only line of code that is different from a regular
""" assert (type(uri) == six.text_type) assert (isinstance(encoded_payload, EncodedPayload)) assert (encoded_payload.enc_algo == u'cryptobox') box = self._get_box(is_originating, uri) if not box: raise Exception( "received encrypted payload, but can't find key!") payload_ser = box.decrypt(encoded_payload.payload, encoder=RawEncoder) if encoded_payload.enc_serializer != u'json': raise Exception( "received encrypted payload, but don't know how to process serializer '{}'" .format(encoded_payload.enc_serializer)) payload = _json_loads(payload_ser.decode('utf8')) uri = payload.get(u'uri', None) args = payload.get(u'args', None) kwargs = payload.get(u'kwargs', None) return uri, args, kwargs # A WAMP-cryptobox keyring can work as a codec for # payload transparency IPayloadCodec.register(KeyRing)
@public def decode(self, is_originating, uri, encoded_payload): """ Decrypt the given WAMP URI and EncodedPayload into a tuple ``(uri, args, kwargs)``. """ assert(type(uri) == six.text_type) assert(isinstance(encoded_payload, EncodedPayload)) assert(encoded_payload.enc_algo == u'cryptobox') box = self._get_box(is_originating, uri) if not box: raise Exception("received encrypted payload, but can't find key!") payload_ser = box.decrypt(encoded_payload.payload, encoder=RawEncoder) if encoded_payload.enc_serializer != u'json': raise Exception("received encrypted payload, but don't know how to process serializer '{}'".format(encoded_payload.enc_serializer)) payload = _json_loads(payload_ser.decode('utf8')) uri = payload.get(u'uri', None) args = payload.get(u'args', None) kwargs = payload.get(u'kwargs', None) return uri, args, kwargs # A WAMP-cryptobox keyring can work as a codec for # payload transparency IPayloadCodec.register(KeyRing)
FORMAT = '>Hl8s' def encode(self, is_originating, uri, args=None, kwargs=None): # Autobahn wants to send custom payload: convert to an instance # of EncodedPayload payload = struct.pack(self.FORMAT, args[0], args[1], args[2]) return EncodedPayload(payload, u'mqtt') def decode(self, is_originating, uri, encoded_payload): # Autobahn has received a custom payload. # convert it into a tuple: (uri, args, kwargs) return uri, struct.unpack(self.FORMAT, encoded_payload.payload), None # we need to register our codec! IPayloadCodec.register(MyCodec) class MySession(ApplicationSession): @inlineCallbacks def onJoin(self, details): self.log.info('session joined: {details}', details=details) # this is the one and only line of code that is different from a regular # WAMP app session: we set our codec, and everything else is transparent (!) self.set_payload_codec(MyCodec()) def on_event(pid, seq, ran, details=None): self.log.info( 'event received on topic {topic}: pid={pid}, seq={seq}, ran={ran}, details={details}\n', topic=TOPIC,
self.with_timestamp = with_timestamp def encode(self, is_originating, uri, args=None, kwargs=None): # Autobahn wants to send custom payload: convert to an instance # of EncodedPayload if self.with_timestamp: kwargs['value'] = kwargs.pop('reading', -1.) payload = json.dumps(kwargs).encode() else: payload = str(kwargs.get('reading', -1.)).encode() return EncodedPayload(payload, u'mqtt') def decode(self, is_originating, uri, encoded_payload): # Autobahn has received a custom payload. # convert it into a tuple: (uri, args, kwargs) if self.with_timestamp: kwargs = json.loads(encoded_payload.payload.decode()) kwargs['reading'] = kwargs.pop('value', -1.) kwargs['uri'] = uri kwargs.setdefault('timestamp') else: kwargs = dict(reading=float(encoded_payload.payload), uri=uri, timestamp=None) return uri, [], kwargs # we need to register our codec! IPayloadCodec.register(VzLoggerCodec)
def decode(self, is_originating, uri, encoded_payload): # Autobahn has received a custom payload. # convert it into a tuple: (uri, args, kwargs) if encoded_payload.enc_algo != ENC_ALGO: raise SerializationError( u'Unrecognized payload encoding algorithm: %s' % encoded_payload.enc_algo) args, kwargs = cbor2.loads(encoded_payload.payload, tag_hook=tag_decoder) return uri, args, kwargs # we need to register our codec! IPayloadCodec.register(CBORCodec) class MySession(ApplicationSession): @inlineCallbacks def onJoin(self, details): self.log.info('session joined: {details}', details=details) # this is the one and only line of code that is different from a regular # WAMP app session: we set our codec, and everything else is transparent (!) self.set_payload_codec(CBORCodec()) def on_event(company): self.log.info('received company event: {company}', company=company) # Check that the cyclic references have been restored