def process(self): """ Return SUBSCRIBE message based on the input HELLO message. """ received_message = PublishMessage(*self.message.value) allow, msg = customize.authorize_publication(received_message.topic, self.connection) answer = None if allow: publication_id = create_global_id() if received_message.options.get("acknowledge"): answer = PublishedMessage( request_id=received_message.request_id, publication_id=publication_id ) self.direct_messages = customize.get_publish_direct_messages( received_message, publication_id, self.connection ) else: answer = ErrorMessage( request_id=received_message.request_id, request_code=received_message.code, uri="tornwamp.publish.unauthorized" ) answer.error(msg) self.answer_message = answer
def __init__(self, websocket, **details): """ Create a connection object provided: - websocket (tornado.websocket.WebSocketHandler instance - details: dictionary of metadata associated to the connection """ self.id = create_global_id() # set connection attributes, if any is given for name, value in details.items(): setattr(self, name, value) # meta-data # TODO: update this self.last_update = datetime.now().isoformat() # communication-related self._websocket = websocket self.topics = { "subscriber": {}, "publisher": {} } # when connection should be closed but something is left self.zombie = False self.zombification_datetime = None
def process(self): """ Return PUBLISHED message based on the PUBLISH message received. """ received_message = PublishMessage(*self.message.value) allow, msg = customize.authorize_publication(received_message.topic, self.connection) answer = None if allow: publication_id = create_global_id() self.broadcast_messages, response = customize.get_publish_messages(received_message, publication_id, self.connection.id) if received_message.options.get("acknowledge"): if response is None: answer = PublishedMessage( request_id=received_message.request_id, publication_id=publication_id ) else: answer = response else: answer = ErrorMessage( request_id=received_message.request_id, request_code=received_message.code, uri="tornwamp.publish.unauthorized" ) answer.error(msg) self.answer_message = answer
def add_publisher(self, topic_name, connection, subscription_id=None): """ Add a connection as a topic's publisher. """ topic = self.create_topic_if_not_exists(topic_name) subscription_id = subscription_id or create_global_id() topic.publishers[subscription_id] = connection connection.add_publishing_channel(subscription_id, topic_name) return subscription_id
def add_subscriber(self, topic_name, connection, subscription_id=None): """ Add a connection as a topic's subscriber. """ topic = self.create_topic_if_not_exists(topic_name) subscription_id = subscription_id or create_global_id() topic.add_subscriber(subscription_id, connection) self[topic_name] = topic connection.add_subscription_channel(subscription_id, topic_name) return subscription_id
def add_publisher(self, topic_name, connection, subscription_id=None): """ Add a connection as a topic's publisher. """ topic = self.get(topic_name, Topic(topic_name)) subscription_id = subscription_id or create_global_id() topic.publishers[subscription_id] = connection self[topic_name] = topic connection.add_publishing_channel(subscription_id, topic_name) return subscription_id
def add_subscriber(self, topic_name, connection, subscription_id=None): """ Add a connection as a topic's subscriber. """ new_topic = Topic(topic_name, self.redis) topic = self.get(topic_name, new_topic) subscription_id = subscription_id or create_global_id() topic.add_subscriber(subscription_id, connection) self[topic_name] = topic connection.add_subscription_channel(subscription_id, topic_name) return subscription_id
def test_create_global_id_random_hit(self, randint): identifier.existing_ids = [1105184] new_id = identifier.create_global_id() self.assertEqual(new_id, 604950) self.assertEqual(identifier.existing_ids, [1105184, 604950]) self.assertEqual(randint.call_count, 2)
def test_create_global_id(self, randint): self.assertEqual(identifier.existing_ids, []) new_id = identifier.create_global_id() self.assertEqual(new_id, 10) self.assertEqual(identifier.existing_ids, [10]) self.assertEqual(randint.call_count, 1)
def __init__(self, code=Code.WELCOME, session_id=None, details=None): self.code = code self.session_id = session_id or create_global_id() self.details = details or DEFAULT_WELCOME_DETAILS self.value = [self.code, self.session_id, self.details]
def __init__(self, code=Code.WELCOME, session_id=None, details=None): self.code = code self.session_id = session_id or create_global_id() self.details = details or DEFAULT_WELCOME_DETAILS self.value = [self.code, self.session_id, self.details]
def test_create_global_id_random_hit(self, randint): identifier.existing_ids = [1105184] new_id = identifier.create_global_id() self.assertEqual(new_id, 604950) self.assertEqual(identifier.existing_ids, [1105184, 604950]) self.assertEqual(randint.call_count, 2)
def test_create_global_id(self, randint): self.assertEqual(identifier.existing_ids, []) new_id = identifier.create_global_id() self.assertEqual(new_id, 10) self.assertEqual(identifier.existing_ids, [10]) self.assertEqual(randint.call_count, 1)