Пример #1
0
 def handle(self):
     sock = self.request
     sock.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
     
     with KnowledgeServer.client_lock:
         client_id = KnowledgeServer.next_client_number
         if not KnowledgeServer.verbose:
             SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Client ' + str(client_id) + ' connected')
         KnowledgeServer.incoming_queue.put_nowait((KnowledgeServer.CENTRAL_CLIENT, '/central/client_connected ' + str(client_id), current_time()))
         KnowledgeServer.connected_clients[client_id] = [sock, 'unknown', 'unknown', current_time(), 'secondary']
         KnowledgeServer.next_client_number += 1
     self.MessageSender(client_id).start()
     
     buf = ''
     while True:
         try:
             t = sock.recv(4096)
             if t == '':
                 break
             else:
                 buf += t
                 while True:
                     pos = buf.find('\n')
                     if pos == -1:
                         break
                     s = buf[:pos].rstrip()
                     if s != '':
                         KnowledgeServer.incoming_queue.put_nowait((client_id, s, current_time()))
                     buf = buf[pos + 1:]
         except socket.error, (errno, _):
             if errno == 10035 or errno == 11:
                 time.sleep(0.001)
                 continue
             break
         except:
Пример #2
0
 def run(self):
     server = self.ThreadingTCPServer((self.host, self.port), self.TCPHandler)
     server.daemon_threads = True
     
     server_thread = threading.Thread(target = server.serve_forever)
     server_thread.daemon = True
     server_thread.start()
     self.ready = True
     
     SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Listening on ' + self.host + ':' + str(self.port))
     while self.ready and server_thread.isAlive():
         time.sleep(0.05)
     self.ready = False
Пример #3
0
 def _handle_msg(self, from_id, msg):
     my_group = MultiIOServer.client_group[from_id]
     parts = msg.split(' ', 2)
     if len(parts) == 2 and parts[0] == '/general/multi_io_server/identify':
         MultiIOServer.client_group[from_id] = parts[1].strip()
         self._broadcast(from_id, '/multi_io_server/client_identified ' + str(from_id) + ' ' + parts[1].strip() + ' ' + current_time())
     else:
         for (client_id, client_group) in MultiIOServer.client_group.items():
             if from_id == client_id or client_group == None or my_group == client_group:
                 continue
             
             if MultiIOServer.verbose:
                 SynchronizedPrint.queue.put_nowait(current_time()[11:-3] + ' ' + str(from_id) + '->' + str(client_id) + ': ' + msg)
             MultiIOServer.message_queues[client_id].put_nowait(msg)
Пример #4
0
 def identify_client(self, client_id, msg):
     parts = msg.split(' ', 4)
     if len(parts) != 5 or parts[0] != '/general/identify':
         return
     types = []
     for key in KnowledgeServer.LISTENERS.keys():
         types.append(re.escape(key))
     match = re.match('/general/identify\s+(' + '|'.join(types) + ')\s+(primary|secondary)\s+([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\.([0-9]+)\s+(.+)$', msg)
     if match == None:
         return
     
     SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Client ' + str(client_id) + ' recognised as type ' + match.group(1) + '(' + match.group(2) + ', ' + match.group(10) + ')')
     KnowledgeServer.connected_clients[client_id][1] = match.group(1)
     KnowledgeServer.connected_clients[client_id][2] = match.group(10)
     KnowledgeServer.connected_clients[client_id][4] = match.group(2)
Пример #5
0
 def run(self):
     for client_type in self.LISTENERS.keys():
         KnowledgeServer.received_messages_for[client_type] = []
     self.MessagePasser().start()
     
     server = self.ThreadingTCPServer((self.host, self.port), self.MyTCPHandler)
     server.daemon_threads = True
     
     server_thread = threading.Thread(target = server.serve_forever)
     server_thread.daemon = True
     server_thread.start()
     self.ready = True
     
     SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Listening on ' + self.host + ':' + str(self.port))
     while self.ready and server_thread.isAlive():
         time.sleep(0.05)
     self.ready = False
Пример #6
0
 def handle(self):
     sock = self.request
     sock.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
     
     with MultiIOServer.client_lock:
         client_id = MultiIOServer.next_client_number
         self._broadcast(client_id, '/multi_io_server/client_connected ' + str(client_id) + ' ' + current_time())
         MultiIOServer.message_queues[client_id] = Queue.Queue()
         MultiIOServer.client_group[client_id] = None
         MultiIOServer.next_client_number += 1
     sender = self.MessageSender(client_id, sock)
     sender.start()
     
     buf = ''
     while sender.keep_running:
         try:
             t = sock.recv(4096)
             if t == '':
                 break
             else:
                 buf += t
                 while True:
                     pos = buf.find('\n')
                     if pos == -1:
                         break
                     s = buf[:pos].rstrip()
                     if s != '':
                         self._handle_msg(client_id, s)
                     buf = buf[pos + 1:]
         except socket.error, (errno, _):
             if errno == 10035 or errno == 11:
                 time.sleep(0.001)
                 continue
             break
         except:
Пример #7
0
 def _broadcast(self, from_id, msg):
     for (client_id, client_group) in MultiIOServer.client_group.items():
         if from_id == client_id or client_group == None:
             continue
         SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Broadcast ' + str(from_id) + '->' + str(client_id) + ': ' + msg)
         MultiIOServer.message_queues[client_id].put_nowait(msg)
Пример #8
0
                         pos = buf.find('\n')
                         if pos == -1:
                             break
                         s = buf[:pos].rstrip()
                         if s != '':
                             self._handle_msg(client_id, s)
                         buf = buf[pos + 1:]
             except socket.error, (errno, _):
                 if errno == 10035 or errno == 11:
                     time.sleep(0.001)
                     continue
                 break
             except:
                 break
         
         self._broadcast(client_id, '/multi_io_server/client_disconnected ' + str(client_id) + ' ' + current_time())
         MultiIOServer.client_group[client_id] = None
         sender.keep_running = False
 
 def run(self):
     server = self.ThreadingTCPServer((self.host, self.port), self.TCPHandler)
     server.daemon_threads = True
     
     server_thread = threading.Thread(target = server.serve_forever)
     server_thread.daemon = True
     server_thread.start()
     self.ready = True
     
     SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Listening on ' + self.host + ':' + str(self.port))
     while self.ready and server_thread.isAlive():
         time.sleep(0.05)
Пример #9
0
 def run(self):
     while True:
         client_type = KnowledgeServer.connected_clients[self.client_id][1]
         if client_type in KnowledgeServer.received_messages_for.keys():
             break
         time.sleep(0.001)
     msg_list = KnowledgeServer.received_messages_for[client_type]
     log_prefix = '/central/sent_message ' + client_type + ' ' + str(self.client_id) + ' '
     
     pos = 0
     while True:
         try:
             num = 0
             old_pos = pos
             messages = ''
             while num < 5 and pos < len(msg_list):
                 msg = msg_list[pos]
                 if msg.is_valid() and (msg.target_id == -1 or msg.target_id == self.client_id):
                     if client_type != 'logger':
                         KnowledgeServer.received_messages_for['logger'].append(Message(log_prefix + current_time() + ' ' + msg.msg, -1, current_time(), None))
                     messages += msg.msg + '\n'
                 pos += 1
                 num += 1
             if pos == old_pos:
                 time.sleep(0.001)
             else:
                 KnowledgeServer.connected_clients[self.client_id][0].send(messages)
         except:
             break
Пример #10
0
 def is_valid(self):
     if self._expires == None:
         return True
     return current_time() < self._expires
Пример #11
0
                         if pos == -1:
                             break
                         s = buf[:pos].rstrip()
                         if s != '':
                             KnowledgeServer.incoming_queue.put_nowait((client_id, s, current_time()))
                         buf = buf[pos + 1:]
             except socket.error, (errno, _):
                 if errno == 10035 or errno == 11:
                     time.sleep(0.001)
                     continue
                 break
             except:
                 break
         
         if not KnowledgeServer.verbose:
             SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Client ' + str(client_id) + ' disconnected')
         KnowledgeServer.incoming_queue.put_nowait((KnowledgeServer.CENTRAL_CLIENT, '/central/client_disconnected ' + str(client_id), current_time()))
         KnowledgeServer.connected_clients[client_id][0] = None
 
 class MessagePasser(threading.Thread):
     def __init__(self):
         threading.Thread.__init__(self)
         self.daemon = True
     
     def mask_matches(self, mask, msg):
         if mask[-1:] == '*':
             return msg[:len(mask) - 1] == mask[:-1]
         elif msg[:len(mask)] == mask:
             return len(msg) == len(mask) or msg[len(mask)] == ' '
         return False
     
Пример #12
0
import time
import os

if __name__ == "__main__":
    parser = OptionParser()
    parser.add_option('--multi_host', dest = 'multi_host', help = 'simulator server host MULTI_HOST (default read from host.txt line 1, otherwise machine name)',
        default = common.host_finder.get_host())
    parser.add_option('--multi_port', dest = 'multi_port', help = 'simulator server port MULTI_PORT (default 19999)', type = 'int', default = 19999)
    parser.add_option('-v', '--verbose', dest = 'verbose', help = 'show more information', action = 'store_true', default = False)
    options = parser.parse_args()[0]
    
    SynchronizedPrint(options.verbose).start()
    multi_io_server = multi_io_server.MultiIOServer(options.multi_host, options.multi_port, options.verbose)
    multi_io_server.start()
    
    SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Waiting for the MultiIOServer to start')
    while not multi_io_server.ready:
        time.sleep(0.001)
    SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' MultiIOServer started')
    
    simulator_cmd = ['python', 'proxy.py']
    simulator_cmd.append('--host')
    simulator_cmd.append(options.multi_host)
    simulator_cmd.append('--port')
    simulator_cmd.append(str(options.multi_port))
    simulator_cmd.append('--add_outgoing')
    simulator_cmd.append('/general/multi_io_server/identify vision')
    simulator_cmd.append('./simulator/simulator' + ('.exe' if os.name == 'nt' else ''))
    
    try:
        simulator = common.module_starter.ModuleStarter(simulator_cmd)
Пример #13
0
import time

if __name__ == "__main__":
    parser = OptionParser()
    parser.add_option('--host', dest = 'host', help = 'central server HOST (default read from host.txt line 1, otherwise machine name)',
        default = common.host_finder.get_host())
    parser.add_option('-p', '--port', dest = 'port', help = 'central server PORT (default 9999)', type = 'int', default = 9999)
    parser.add_option('-z', '--zoom', dest = 'zoom', help = 'pitch zoom (positive integers only); default is 4', type = 'int', default = 4)
    parser.add_option('-v', '--verbose', dest = 'verbose', help = 'show more information', action = 'store_true', default = False)
    options = parser.parse_args()[0]
    
    SynchronizedPrint(options.verbose).start()
    knowledge_server = central.KnowledgeServer(options.host, options.port, options.verbose)
    knowledge_server.start()
    
    SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Waiting for the knowledge server to start')
    while not knowledge_server.ready:
        time.sleep(0.001)
    SynchronizedPrint.important.put_nowait(current_time()[11:-3] + ' Knowledge server started')
    
    modules = {
        'logger': ['python proxy.py --host ' + options.host + ' -p ' + str(options.port) + ' python logger.py', None],
        'kicker': ['python proxy.py --host ' + options.host + ' -p ' + str(options.port) + ' python kicker.py', None],
    }
    
    try:
        common.module_starter.ModuleStarter('python visualiser.py --host ' + options.host + ' -p ' + str(options.port) + ' -z ' + str(options.zoom)).start()
        
        while knowledge_server.isAlive():
            for (module, module_data) in modules.items():
                if knowledge_server.have_module(module):