コード例 #1
0
    def __init__(self,HOST="localhost",PORT=9000):
        # Create the server, binding to localhost on port 9999
        self.server = ThreadedServer((HOST, PORT), MyTCPHandler)
        self.tosend = PriorityQueue()
        # Activate the server; this will keep running until you
        # interrupt the program with Ctrl-C
        self.server_worker = WorkerManager()
        self.server_worker.set_target(self.server.serve_forever)
        self.server_worker.ishandler = False
        self.server_worker.ideal_threads = 1
        self.server_worker.start()

        self.client_worker = WorkerManager()
        self.client_worker.set_target(self.sender_loop)
        self.client_worker.ideal_threads = 4
        self.client_worker.start()
コード例 #2
0
class NETWORK_SERVICE(object):
    def sender_loop(self, x):
        #print "sender loop", x
        priority, dest, msg = x
        self.client_send(dest,msg)


    def send_message(self,msg,dest):
        #print "send message called"
        msg_pack = (msg.priority,dest,msg)
        self.client_worker.putjob(msg_pack)
        

    def __init__(self,HOST="localhost",PORT=9000):
        # Create the server, binding to localhost on port 9999
        self.server = ThreadedServer((HOST, PORT), MyTCPHandler)
        self.tosend = PriorityQueue()
        # Activate the server; this will keep running until you
        # interrupt the program with Ctrl-C
        self.server_worker = WorkerManager()
        self.server_worker.set_target(self.server.serve_forever)
        self.server_worker.ishandler = False
        self.server_worker.ideal_threads = 1
        self.server_worker.start()

        self.client_worker = WorkerManager()
        self.client_worker.set_target(self.sender_loop)
        self.client_worker.ideal_threads = 4
        self.client_worker.start()
        
    def stop(self):
        self.server.shutdown()
        self.server_worker.stop()
        self.client_worker.stop()

    def update_messages_in_queue(self, failed_node):
        hold = []
        while not self.tosend.empty():
            temp = self.tosend.get()
            self.tosend.task_done()
            if temp[1] == failed_node:
                node.message_failed(temp[2],temp[1])
            else:
                hold.append(temp)
        for h in hold:
            self.tosend.put()

    def client_send(self, dest, msg):
        #print "sending", msg.service, msg.type, str(dest)
        HOST = dest.IPAddr
        PORT = dest.ctrlPort
        DATA = msg.serialize()
        ##print len(DATA)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(2.0)
        try:
            # Connect to server and send data
            sock.connect((HOST, PORT))
            sock.send(DATA)
            sock.shutdown(1)
            ack = sock.recv(1)
        except socket.error:
            ##print e
            #sock.close()
            print "SOCKET ERROR"
            print "Tried to send to ", HOST, ":",PORT
            node.message_failed(msg,dest)
            #self.update_messages_in_queue(dest)
        finally:
            #print ">",
            sock.close()
            ##print DATA[-20:],len(DATA)%8
            return True