Example #1
0
 def start(self):
     '''
     Start the IOLoop. Will allow messages to be send and received
     asynchronously on the pub and router ZMQStreams.
     '''
     log.info('Starting broker')
     self.loop.start()
     log.debug('Exited broker IOLoop')
Example #2
0
 def start(self):
     '''
     Start the IOLoop. Will allow messages to be send and received
     asynchronously on the pub and router ZMQStreams.
     '''
     log.info('Starting broker')
     self.loop.start()
     log.debug('Exited broker IOLoop')
Example #3
0
    def __send_zmq_message(self, zmq_msg):
        frames = zmq_msg.to_frames()

        log.debug("SEND %s: %s" % (frames[0], frames[2]))

        self.pub.send_multipart(frames)

        # This shouldn't be necessary but, for some reason, pyzmq stops
        # sending messages on the PUB socket after about a second or so.
        # IOLoop is somehow not receiving the WRITE events correctly.
        # Need to revisit this at some point, but this at least ensures
        # that messages get sent.
        self.pub.flush()
Example #4
0
    def __send_zmq_message(self, zmq_msg):        
        frames = zmq_msg.to_frames()
        
        log.debug("SEND %s: %s" % (frames[0], frames[2]))

        self.pub.send_multipart(frames)
        
        # This shouldn't be necessary but, for some reason, pyzmq stops
        # sending messages on the PUB socket after about a second or so.
        # IOLoop is somehow not receiving the WRITE events correctly.
        # Need to revisit this at some point, but this at least ensures
        # that messages get sent.
        self.pub.flush()
Example #5
0
    def receive_message(self, msg_frames):
        '''
        Assembles message from raw frames and dispatch it.

        msgs should be a list of two bytes values, the first being the ZMQ ID for
        the sender, and the second being the JSON message from the nodes.
        '''
        zmq_msg = ZMQMessage.from_zmq_frames(msg_frames)

        if zmq_msg["type"] == "helloResponse":
            log.debug("RECV %s: %s" % (zmq_msg['source'], msg_frames[2]))
        else:
            log.debug("RECV %s: %s" % (self.zid_node.get(
                msg_frames[0], "unknown node"), msg_frames[2]))

        if zmq_msg["type"] == "helloResponse":
            node_name = zmq_msg['source']
            if node_name in self.node_zid:
                err = "Duplicate hello from " + node_name
                log.debug(err)

            self.node_zid[node_name] = zmq_msg.identity
            self.zid_node[zmq_msg.identity] = node_name

            log.info(node_name + " connected")

            self.ds.nodes[node_name].set_state(Node.STATE_RUNNING)

            self.router.send_multipart([
                zmq_msg.identity, "",
                json.dumps({
                    "type": "ack",
                    "original": zmq_msg.fields
                })
            ])

        elif zmq_msg["type"] == "log":
            pass
        else:
            self.router.send_multipart([
                zmq_msg.identity, "",
                json.dumps({
                    "type": "ack",
                    "original": zmq_msg.fields
                })
            ])

            msg = zmq_msg.to_msg()
            if msg is not None:
                self.ds.process_message(msg,
                                        source=self.zid_node.get(
                                            msg_frames[0]))
Example #6
0
    def receive_message(self, msg_frames):
        '''
        Assembles message from raw frames and dispatch it.

        msgs should be a list of two bytes values, the first being the ZMQ ID for
        the sender, and the second being the JSON message from the nodes.
        '''
        zmq_msg = ZMQMessage.from_zmq_frames(msg_frames)

        if zmq_msg["type"] == "helloResponse":
            log.debug("RECV %s: %s" % (zmq_msg['source'], msg_frames[2]))
        else:
            log.debug("RECV %s: %s" % (self.zid_node.get(msg_frames[0], "unknown node"), msg_frames[2]))
 
        if zmq_msg["type"] == "helloResponse":        
            node_name = zmq_msg['source']
            if node_name in self.node_zid:
                err = "Duplicate hello from " + node_name
                log.debug(err)
    
            self.node_zid[node_name] = zmq_msg.identity
            self.zid_node[zmq_msg.identity] = node_name
        
            log.info(node_name + " connected")
            
            self.ds.nodes[node_name].set_state(Node.STATE_RUNNING)

            self.router.send_multipart([zmq_msg.identity,
                                        "".encode(),
                                        json.dumps({"type": "ack", "original": zmq_msg.fields}).encode()])

        elif zmq_msg["type"] == "log":
            pass
        else:
            self.router.send_multipart([zmq_msg.identity,
                                        "".encode(),
                                        json.dumps({"type": "ack", "original": zmq_msg.fields}).encode()])
            
            msg = zmq_msg.to_msg()
            if msg is not None:
                self.ds.process_message(msg, source = self.zid_node.get(msg_frames[0]))