示例#1
0
文件: ethernet.py 项目: jurex/reactor
    def publisher(self):
        counter = 0

        while True:
            datagram, address = self.rq.get()
            logger.debug("Packet received: " + datagram + " from ip: " + str(address))

            # parse packet
            try:
            
                packet = Packet()
                packet.from_json(datagram)

            except Exception, err:
                logger.error("could not parse packet: " +  str(datagram) + " : " + str(err))
                logger.debug(traceback.format_exc())
                continue

            # update address  cache
            if packet.src not in self.cache:
                self.cache[packet.src] = str(address[0])+":"+str(address[1])
                logger.debug('ip address registred: ' + str(packet.src) + " = " + str(address[0])+":"+str(address[1]))
                # TODO: persist
            elif(self.cache[packet.src] != str(address[0])+":"+str(address[1])):
                self.cache[packet.src] = str(address[0])+":"+str(address[1])

            # create event based on packet cmd
            if packet.cmd == "device.update":

                # create event
                event = Event("device.update")
                event.src = self.name
                event.data = packet.data
                event.data["sys.id"] = packet.src

            else:
                logger.error("unknown command")
                continue;

            # logger.debug("publish counter: " + str(counter))

            # publish event
            self.eventbus.publish(event, "adapter")