Пример #1
0
 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
Пример #2
0
    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
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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)
Пример #9
0
 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)
Пример #10
0
 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]
Пример #11
0
 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]
Пример #12
0
 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)
Пример #13
0
 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)