def send(self, message): """ Send the message, respond with it's success message synchronously. Append it to C{self._messages} for later analysis. """ self._messages.append(message) if isinstance(message, Hello): self._session.onMessage( Welcome(1, { u"broker": RoleBrokerFeatures(), u"dealer": RoleDealerFeatures() }, authrole=u"anonymous")) elif isinstance(message, Register): self._session.onMessage( Registered(message.request, message.request)) elif isinstance(message, Publish): if message.acknowledge: self._session.onMessage( Published(message.request, message.request)) elif isinstance(message, Subscribe): self._session.onMessage( Subscribed(message.request, message.request)) else: assert False, message
def connect(factory, **kw): proto = factory.buildProtocol('ws://localhost/') transport = FakeTransport() proto.makeConnection(transport) from autobahn.websocket.protocol import WebSocketProtocol from base64 import b64encode from hashlib import sha1 key = proto.websocket_key + WebSocketProtocol._WS_MAGIC proto.data = (b"HTTP/1.1 101 Switching Protocols\x0d\x0a" b"Upgrade: websocket\x0d\x0a" b"Connection: upgrade\x0d\x0a" b"Sec-Websocket-Protocol: wamp.2.json\x0d\x0a" b"Sec-Websocket-Accept: " + b64encode(sha1(key).digest()) + b"\x0d\x0a\x0d\x0a") proto.processHandshake() from autobahn.wamp import role features = role.RoleBrokerFeatures( publisher_identification=True, pattern_based_subscription=True, session_meta_api=True, subscription_meta_api=True, subscriber_blackwhite_listing=True, publisher_exclusion=True, subscription_revocation=True, payload_transparency=True, payload_encryption_cryptobox=True, ) msg = Welcome(123456, dict(broker=features), realm='realm') serializer = JsonSerializer() data, is_binary = serializer.serialize(msg) proto.onMessage(data, is_binary) msg = Goodbye() proto.onMessage(*serializer.serialize(msg)) proto.onClose(True, 100, "some old reason") return succeed(proto)