def onJoin(self, details): self._service_session._session_id = details.session router.attach(self._service_session) router._broker._router._realm.session = self._service_session subscription = message.Subscribe(self._service_session._session_id, 'com.example.test1') router._broker.processSubscribe(self._service_session, subscription) subscription = message.Subscribe(self._service_session._session_id, 'com.example.test2') router._broker.processSubscribe(self._service_session, subscription) subscription = message.Subscribe(self._service_session._session_id, 'com.example.test3') router._broker.processSubscribe(self._service_session, subscription) subscriptions = [] for obj in list(self._service_session._private): subscriptions.append(obj.subscription) router.detach(self._service_session) def all_done(): # # These lists are initialised with the subscription id's we've generated # with out subscribe sequence, the following routines should decrement each # list to exactly zero. # created = list(subscriptions) subscribes = list(subscriptions) unsubscribes = list(subscriptions) deletes = list(subscriptions) for args, argv in self._service_session._events: if args[0] == 'wamp.subscription.on_create': test.assertEqual(args[1], self._service_session._session_id, 'on_create: session id is incorrect!') test.assertTrue(args[2]['id'] in created, 'on_create: subscription id is incorrect!') created.remove(args[2]['id']) if args[0] == 'wamp.subscription.on_subscribe': test.assertEqual(args[1], self._service_session._session_id, 'on_subscribe: session id is incorrect!') test.assertTrue(args[2] in subscribes, 'on_subscribe: subscription id is incorrect!') subscribes.remove(args[2]) if args[0] == 'wamp.subscription.on_unsubscribe': test.assertEqual(args[1], self._service_session._session_id, 'on_unsubscribe: session id is incorrect!') test.assertTrue(args[2] in unsubscribes, 'on_unsubscribe: subscription id is incorrect!') unsubscribes.remove(args[2]) if args[0] == 'wamp.subscription.on_delete': test.assertEqual(args[1], self._service_session._session_id, 'on_delete: session id is incorrect!') test.assertTrue(args[2] in deletes, 'on_delete: subscription id is incorrect!') deletes.remove(args[2]) test.assertEqual(len(created), 0, 'incorrect response sequence for on_create') test.assertEqual(len(subscribes), 0, 'incorrect response sequence for on_subscribe') test.assertEqual(len(unsubscribes), 0, 'incorrect response sequence for on_unsubscribe') test.assertEqual(len(deletes), 0, 'incorrect response sequence for on_delete') reactor.callLater(0, all_done)
def onJoin(self, details): self._service_session._session_id = details.session router.attach(self._service_session) router._broker._router._realm.session = self._service_session subscription = message.Subscribe(self._service_session._session_id, 'com.example.test1') router._broker.processSubscribe(self._service_session, subscription) subscription = message.Subscribe(self._service_session._session_id, 'com.example.test2') router._broker.processSubscribe(self._service_session, subscription) subscription = message.Subscribe(self._service_session._session_id, 'com.example.test3') router._broker.processSubscribe(self._service_session, subscription) subscriptions = [] for obj in list(self._service_session._private): subscription = message.Unsubscribe(self._service_session._session_id, subscription=obj.subscription) router._broker.processUnsubscribe(self._service_session, subscription) subscriptions.append(obj.subscription) def all_done(): created = list(subscriptions) subscribes = list(subscriptions) unsubscribes = list(subscriptions) deletes = list(subscriptions) for args, argv in self._service_session._events: if args[0] == 'wamp.subscription.on_create': test.assertEqual(args[1], self._service_session._session_id, 'on_create: session id is incorrect!') test.assertTrue(args[2]['id'] in created, 'on_create: subscription id is incorrect!') created.remove(args[2]['id']) if args[0] == 'wamp.subscription.on_subscribe': test.assertEqual(args[1], self._service_session._session_id, 'on_subscribe: session id is incorrect!') test.assertTrue(args[2] in subscribes, 'on_subscribe: subscription id is incorrect!') subscribes.remove(args[2]) if args[0] == 'wamp.subscription.on_unsubscribe': test.assertEqual(args[1], self._service_session._session_id, 'on_unsubscribe: session id is incorrect!') test.assertTrue(args[2] in unsubscribes, 'on_unsubscribe: subscription id is incorrect!') unsubscribes.remove(args[2]) if args[0] == 'wamp.subscription.on_delete': test.assertEqual(args[1], self._service_session._session_id, 'on_delete: session id is incorrect!') test.assertTrue(args[2] in deletes, 'on_delete: subscription id is incorrect!') deletes.remove(args[2]) test.assertEqual(len(created), 0, 'incorrect response sequence for on_create') test.assertEqual(len(subscribes), 0, 'incorrect response sequence for on_subscribe') test.assertEqual(len(unsubscribes), 0, 'incorrect response sequence for on_unsubscribe') test.assertEqual(len(deletes), 0, 'incorrect response sequence for on_delete') reactor.callLater(0, all_done)
def _subscribe(obj, handler, topic, options): request = util.id() d = self._create_future() self._subscribe_reqs[request] = (d, obj, handler, topic, options) if options is not None: msg = message.Subscribe(request, topic, **options.options) else: msg = message.Subscribe(request, topic) self._transport.send(msg) return d
def _subscribe(obj, fn, topic, options): request_id = self._request_id_gen.next() on_reply = txaio.create_future() handler_obj = Handler(fn, obj, options.details_arg if options else None) self._subscribe_reqs[request_id] = SubscribeRequest(request_id, on_reply, handler_obj) if options: msg = message.Subscribe(request_id, topic, **options.message_attr()) else: msg = message.Subscribe(request_id, topic) self._transport.send(msg) return on_reply
def generate_test_messages(): """ List of WAMP test message used for serializers. Expand this if you add more options or messages. This list of WAMP message does not contain any binary app payloads! """ msgs = [ message.Hello(u"realm1", {u'subscriber': role.RoleSubscriberFeatures()}), message.Goodbye(), message.Yield(123456), message.Yield(123456, args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Yield(123456, args=[u'hello']), message.Yield(123456, progress=True), message.Interrupt(123456), message.Interrupt(123456, mode=message.Interrupt.KILL), message.Invocation(123456, 789123), message.Invocation(123456, 789123, args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Invocation(123456, 789123, timeout=10000), message.Result(123456), message.Result(123456, args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Result(123456, progress=True), message.Cancel(123456), message.Cancel(123456, mode=message.Cancel.KILL), message.Call(123456, u'com.myapp.procedure1'), message.Call(123456, u'com.myapp.procedure1', args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Call(123456, u'com.myapp.procedure1', timeout=10000), message.Unregistered(123456), message.Unregister(123456, 789123), message.Registered(123456, 789123), message.Register(123456, u'com.myapp.procedure1'), message.Register(123456, u'com.myapp.procedure1', match=u'prefix'), message.Register(123456, u'com.myapp.procedure1', invoke=u'roundrobin'), message.Event(123456, 789123), message.Event(123456, 789123, args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Event(123456, 789123, publisher=300), message.Published(123456, 789123), message.Publish(123456, u'com.myapp.topic1'), message.Publish(123456, u'com.myapp.topic1', args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Publish(123456, u'com.myapp.topic1', exclude_me=False, exclude=[300], eligible=[100, 200, 300]), message.Unsubscribed(123456), message.Unsubscribe(123456, 789123), message.Subscribed(123456, 789123), message.Subscribe(123456, u'com.myapp.topic1'), message.Subscribe(123456, u'com.myapp.topic1', match=message.Subscribe.MATCH_PREFIX), message.Error(message.Call.MESSAGE_TYPE, 123456, u'com.myapp.error1'), message.Error(message.Call.MESSAGE_TYPE, 123456, u'com.myapp.error1', args=[1, 2, 3], kwargs={u'foo': 23, u'bar': u'hello'}), message.Call(123456, u'com.myapp.\u4f60\u597d\u4e16\u754c', args=[1, 2, 3]), message.Result(123456, args=[1, 2, 3], kwargs={u'en': u'Hello World', u'jp': u'\u3053\u3093\u306b\u3061\u306f\u4e16\u754c'}) ] return [(False, msg) for msg in msgs]
def test_ctor(self): e = message.Subscribe(123456, u'com.myapp.topic1') msg = e.marshal() self.assertEqual(len(msg), 4) self.assertEqual(msg[0], message.Subscribe.MESSAGE_TYPE) self.assertEqual(msg[1], 123456) self.assertEqual(msg[2], {}) self.assertEqual(msg[3], u'com.myapp.topic1') e = message.Subscribe(123456, u'com.myapp.topic1', match = message.Subscribe.MATCH_PREFIX) msg = e.marshal() self.assertEqual(len(msg), 4) self.assertEqual(msg[0], message.Subscribe.MESSAGE_TYPE) self.assertEqual(msg[1], 123456) self.assertEqual(msg[2], {u'match': u'prefix'}) self.assertEqual(msg[3], u'com.myapp.topic1')
async def _on_welcome(self, msg): self.connected = True for request_id, subscription in self.queue.items(): topic = subscription['topic'] subscribe = message.Subscribe(request=request_id, topic=topic) self.send(subscribe)
def subscribe(self, handler, topic): request_id = random.randint(10**14, 10**15 - 1) subscription = {'topic': topic, 'handler': handler} if self.connected: self.queue[request_id] = subscription self.send(message.Subscribe(request=request_id, topic=topic)) else: self.queue[request_id] = subscription
def generate_test_messages(): return [ message.Hello(u"realm1", [role.RoleBrokerFeatures()]), message.Goodbye(), message.Heartbeat(123, 456), message.Yield(123456), message.Yield(123456, args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Yield(123456, progress = True), message.Interrupt(123456), message.Interrupt(123456, mode = message.Interrupt.KILL), message.Invocation(123456, 789123), message.Invocation(123456, 789123, args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Invocation(123456, 789123, timeout = 10000), message.Result(123456), message.Result(123456, args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Result(123456, progress = True), message.Cancel(123456), message.Cancel(123456, mode = message.Cancel.KILL), message.Call(123456, u'com.myapp.procedure1'), message.Call(123456, u'com.myapp.procedure1', args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Call(123456, u'com.myapp.procedure1', timeout = 10000), message.Unregistered(123456), message.Unregister(123456, 789123), message.Registered(123456, 789123), message.Register(123456, u'com.myapp.procedure1'), message.Register(123456, u'com.myapp.procedure1', pkeys = [10, 11, 12]), message.Event(123456, 789123), message.Event(123456, 789123, args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Event(123456, 789123, publisher = 300), message.Published(123456, 789123), message.Publish(123456, u'com.myapp.topic1'), message.Publish(123456, u'com.myapp.topic1', args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Publish(123456, u'com.myapp.topic1', excludeMe = False, exclude = [300], eligible = [100, 200, 300], discloseMe = True), message.Unsubscribed(123456), message.Unsubscribe(123456, 789123), message.Subscribed(123456, 789123), message.Subscribe(123456, u'com.myapp.topic1'), message.Subscribe(123456, u'com.myapp.topic1', match = message.Subscribe.MATCH_PREFIX), message.Error(message.Call.MESSAGE_TYPE, 123456, u'com.myapp.error1'), message.Error(message.Call.MESSAGE_TYPE, 123456, u'com.myapp.error1', args = [1, 2, 3], kwargs = {u'foo': 23, u'bar': u'hello'}), message.Call(123456, u'com.myapp.\u4f60\u597d\u4e16\u754c', args=[1, 2, 3]), message.Result(123456, args=[1, 2, 3], kwargs={u'en': u'Hello World', u'jp': u'\u3053\u3093\u306b\u3061\u306f\u4e16\u754c'}) ]
async def _on_welcome(self, msg): self.connected = True if callable(self.on_welcome_callback): if inspect.iscoroutinefunction(self.on_welcome_callback): await self.on_welcome_callback() else: self.on_welcome_callback() for request_id, subscription in self.queue.items(): topic = subscription['topic'] subscribe = message.Subscribe(request=request_id, topic=topic) self.send(subscribe)
def process_subscribe(self, packet): packet_watch = OrderedDict() d = Deferred() @d.addCallback def _(ign): self._mqtt.send_suback( packet.packet_identifier, [x["response"] for x in packet_watch.values()]) del self._inflight_subscriptions[packet.packet_identifier] del self._subrequest_callbacks[packet.packet_identifier] self._subrequest_callbacks[packet.packet_identifier] = d self._inflight_subscriptions[packet.packet_identifier] = packet_watch for n, x in enumerate(packet.topic_requests): topic, match = _mqtt_topicfilter_to_wamp(x.topic_filter) self.log.info('process_subscribe -> topic={topic}, match={match}', topic=topic, match=match) request_id = util.id() msg = message.Subscribe( request=request_id, topic=topic, match=match, get_retained=True, ) try: packet_watch[request_id] = { "response": -1, "topic": x.topic_filter } self._subrequest_to_mqtt_subrequest[ request_id] = packet.packet_identifier self._wamp_session.onMessage(msg) except: self.log.failure() packet_watch[request_id] = {"response": 128}
def process_subscribe(self, packet): packet_watch = OrderedDict() d = Deferred() @d.addCallback def _(ign): self._mqtt.send_suback( packet.packet_identifier, [x["response"] for x in packet_watch.values()]) del self._inflight_subscriptions[packet.packet_identifier] del self._subrequest_callbacks[packet.packet_identifier] self._subrequest_callbacks[packet.packet_identifier] = d self._inflight_subscriptions[packet.packet_identifier] = packet_watch for n, x in enumerate(packet.topic_requests): # fixme match_type = u"exact" request_id = util.id() msg = message.Subscribe( request=request_id, topic=u".".join(tokenise_mqtt_topic(x.topic_filter)), match=match_type, get_retained=True, ) try: packet_watch[request_id] = { "response": -1, "topic": x.topic_filter } self._subrequest_to_mqtt_subrequest[ request_id] = packet.packet_identifier self._wamp_session.onMessage(msg) except Exception: self.log.failure() packet_watch[request_id] = {"response": 128}
def generate_test_messages(): """ List of WAMP test message used for serializers. Expand this if you add more options or messages. This list of WAMP message does not contain any binary app payloads! """ some_bytes = os.urandom(32) some_unicode = '\u3053\u3093\u306b\u3061\u306f\u4e16\u754c' some_uri = 'com.myapp.foobar' some_unicode_uri = 'com.myapp.\u4f60\u597d\u4e16\u754c.baz' some_args = [1, 2, 3, 'hello', some_bytes, some_unicode, {'foo': 23, 'bar': 'hello', 'baz': some_bytes, 'moo': some_unicode}] some_kwargs = {'foo': 23, 'bar': 'hello', 'baz': some_bytes, 'moo': some_unicode, 'arr': some_args} msgs = [ message.Hello("realm1", {'subscriber': role.RoleSubscriberFeatures()}), message.Hello("realm1", {'publisher': role.RolePublisherFeatures()}), message.Hello("realm1", {'caller': role.RoleCallerFeatures()}), message.Hello("realm1", {'callee': role.RoleCalleeFeatures()}), message.Hello("realm1", { 'subscriber': role.RoleSubscriberFeatures(), 'publisher': role.RolePublisherFeatures(), 'caller': role.RoleCallerFeatures(), 'callee': role.RoleCalleeFeatures(), }), message.Goodbye(), message.Yield(123456), message.Yield(123456, args=some_args), message.Yield(123456, args=[], kwargs=some_kwargs), message.Yield(123456, args=some_args, kwargs=some_kwargs), message.Yield(123456, progress=True), message.Interrupt(123456), message.Interrupt(123456, mode=message.Interrupt.KILL), message.Invocation(123456, 789123), message.Invocation(123456, 789123, args=some_args), message.Invocation(123456, 789123, args=[], kwargs=some_kwargs), message.Invocation(123456, 789123, args=some_args, kwargs=some_kwargs), message.Invocation(123456, 789123, timeout=10000), message.Result(123456), message.Result(123456, args=some_args), message.Result(123456, args=[], kwargs=some_kwargs), message.Result(123456, args=some_args, kwargs=some_kwargs), message.Result(123456, progress=True), message.Cancel(123456), message.Cancel(123456, mode=message.Cancel.KILL), message.Call(123456, some_uri), message.Call(123456, some_uri, args=some_args), message.Call(123456, some_uri, args=[], kwargs=some_kwargs), message.Call(123456, some_uri, args=some_args, kwargs=some_kwargs), message.Call(123456, some_uri, timeout=10000), message.Call(123456, some_unicode_uri), message.Call(123456, some_unicode_uri, args=some_args), message.Call(123456, some_unicode_uri, args=[], kwargs=some_kwargs), message.Call(123456, some_unicode_uri, args=some_args, kwargs=some_kwargs), message.Call(123456, some_unicode_uri, timeout=10000), message.Unregistered(123456), message.Unregister(123456, 789123), message.Registered(123456, 789123), message.Register(123456, some_uri), message.Register(123456, some_uri, match='prefix'), message.Register(123456, some_uri, invoke='roundrobin'), message.Register(123456, some_unicode_uri), message.Register(123456, some_unicode_uri, match='prefix'), message.Register(123456, some_unicode_uri, invoke='roundrobin'), message.Event(123456, 789123), message.Event(123456, 789123, args=some_args), message.Event(123456, 789123, args=[], kwargs=some_kwargs), message.Event(123456, 789123, args=some_args, kwargs=some_kwargs), message.Event(123456, 789123, publisher=300), message.Published(123456, 789123), message.Publish(123456, some_uri), message.Publish(123456, some_uri, args=some_args), message.Publish(123456, some_uri, args=[], kwargs=some_kwargs), message.Publish(123456, some_uri, args=some_args, kwargs=some_kwargs), message.Publish(123456, some_uri, exclude_me=False, exclude=[300], eligible=[100, 200, 300]), message.Publish(123456, some_unicode_uri), message.Publish(123456, some_unicode_uri, args=some_args), message.Publish(123456, some_unicode_uri, args=[], kwargs=some_kwargs), message.Publish(123456, some_unicode_uri, args=some_args, kwargs=some_kwargs), message.Publish(123456, some_unicode_uri, exclude_me=False, exclude=[300], eligible=[100, 200, 300]), message.Unsubscribed(123456), message.Unsubscribe(123456, 789123), message.Subscribed(123456, 789123), message.Subscribe(123456, some_uri), message.Subscribe(123456, some_uri, match=message.Subscribe.MATCH_PREFIX), message.Subscribe(123456, some_unicode_uri), message.Subscribe(123456, some_unicode_uri, match=message.Subscribe.MATCH_PREFIX), message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri), message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri, args=some_args), message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri, args=[], kwargs=some_kwargs), message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri, args=some_args, kwargs=some_kwargs), message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri), message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri, args=some_args), message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri, args=[], kwargs=some_kwargs), message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri, args=some_args, kwargs=some_kwargs), message.Result(123456), message.Result(123456, args=some_args), message.Result(123456, args=some_args, kwargs=some_kwargs), ] return [(False, msg) for msg in msgs]