Ejemplo n.º 1
0
def test_new_node():
    serialized = Message.new_node('1234')

    assert serialized == Message.serialize({
        'type': 'new',
        'uid': '1234',
        'dst': 'all'
    })

    serialized = Message.new_node('1234', '5678')
    assert serialized == Message.serialize({
        'type': 'new',
        'uid': '1234',
        'dst': '5678'
    })
Ejemplo n.º 2
0
def test_update_node(value):
    serialized = Message.update_node('1234', 'test', 'value')

    assert serialized == Message.serialize({
        'type': 'update',
        'uid': '1234',
        'endpoint': 'test',
        'data': 'value',
        'dst': 'all'
    })

    serialized = Message.update_node('1234', 'test', value, '5678')
    assert serialized == Message.serialize({
        'type': 'update',
        'uid': '1234',
        'endpoint': 'test',
        'data': value,
        'dst': '5678'
    })
Ejemplo n.º 3
0
    def on_gateway_message(self, ws, message):
        """Handle a message received from a gateway.

        This method redirect messages from gateways to the right destinations:
        - for freshly new information initiated by nodes => broadcast
        - for replies to new client connection => only send to this client
        """
        logger.debug(
            "Handling message '{}' received from gateway.".format(message))
        if message['type'] == "new":
            # Received when notifying clients of a new node available
            if not message['uid'] in self.gateways[ws]:
                self.gateways[ws].append(message['uid'])

            if message['dst'] == "all":
                # Occurs when an unknown new node arrived
                self.broadcast(Message.serialize(message))
            elif message['dst'] in self.clients.keys():
                # Occurs when a single client has just connected
                self.send_to_client(message['dst'], Message.serialize(message))
        elif (message['type'] == "out"
              and message['uid'] in self.gateways[ws]):
            # Node disparition are always broadcasted to clients
            self.gateways[ws].remove(message['uid'])
            self.broadcast(Message.serialize(message))
        elif (message['type'] == "update"
              and message['uid'] in self.gateways[ws]):
            if message['dst'] == "all":
                # Occurs when a new update was pushed by a node:
                # require broadcast
                self.broadcast(Message.serialize(message))
            elif message['dst'] in self.clients.keys():
                # Occurs when a new client has just connected:
                # Only the cached information of a node are pushed to this
                # specific client
                self.send_to_client(message['dst'], Message.serialize(message))
Ejemplo n.º 4
0
    def on_client_message(self, ws, message):
        """Handle a message received from a client."""
        logger.debug("Handling message '{}' received from client websocket."
                     .format(message))
        if message['type'] == "new":
            logger.info("New client connected: {}".format(ws.uid))
            if ws.uid not in self.clients.keys():
                self.clients.update({ws.uid: ws})
        elif message['type'] == "update":
            logger.debug("New message from client: {}".format(ws.uid))

        # Simply forward this message to satellite gateways
        logger.debug("Forwarding message {} to gateways".format(message))
        for gw in self.gateways:
            gw.write_message(Message.serialize(message))
Ejemplo n.º 5
0
def test_serialize(message):
    serialized = Message.serialize(message)

    assert serialized == json.dumps(message, ensure_ascii=False)
Ejemplo n.º 6
0
def test_discover_node():
    serialized = Message.discover_node()

    assert serialized == Message.serialize({'request': 'discover'})
Ejemplo n.º 7
0
def test_reset_node():
    serialized = Message.reset_node('1234')

    assert serialized == Message.serialize({'type': 'reset', 'uid': '1234'})
Ejemplo n.º 8
0
def test_out_node():
    serialized = Message.out_node('1234')

    assert serialized == Message.serialize({'type': 'out', 'uid': '1234'})