Exemplo n.º 1
0
def main():
    
    # create udp socket
    sock = socket(AF_INET,SOCK_DGRAM)
    #sock.bind(("0.0.0.0", SERVER_PORT))
    
    # send messages to server
    for i in range(0, 10):
        packet = Packet()
        packet.src = 25
        packet.dst = 1
        packet.cmd = "device.update"
        packet.seq = i
        packet.data = {"sys.banner":"hello world", "io.counter": i}

        sock.sendto(packet.to_json(), (SERVER_IP, SERVER_PORT))
        print "Packet sent: " + packet.to_json()
        
        #time.sleep(0.001)
        
    print("Listening for packets...")
    
    counter = 0

    while True:
        # blocking read
        datagram, address = sock.recvfrom(1024) # buffer size is 1024 bytes

        counter = counter + 1

        print("Packet received: " + str(datagram) + " ip: " + str(address) + " c: " + str(counter))
Exemplo n.º 2
0
    def sender(self, socket):
        logger.debug('Waiting for events')
        
        # subscribe
        self.eventbus.subscribe("core")
        self.eventbus.subscribe("plugin")

        # listen for events
        for event in self.eventbus.listen():

            logger.debug("Event received: " + event.to_json())

            if(event.name == "device.push"):
                
                packet = Packet()
                packet.dst = 25
                packet.src = 1
                packet.cmd = event.name
                packet.data = event.data

                #logger.debug("packet to send: " + packet.to_json())
                
                addr = self.cache.get(packet.dst)
                if(addr == None):
                    logger.error("Address not found for device: " + str(packet.dst))
                    continue
                    
                address = addr.split(":")
                #address = ["192.168.1.1", 4444]
                
                # send packet
                socket.sendto(packet.to_json(), (address[0], int(address[1])))
                logger.debug("Packet sent: " + packet.to_json() + " to: " + str(address))
                continue
Exemplo n.º 3
0
    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")