Exemple #1
0
def server_thread():
    global users_sockets, should_exit
    while not should_exit:
        for username in users_sockets.keys():
            #check the active socket for data
            try:
                data = users_sockets[username].main_socket.recv(512)
                if data:
                    while not data.endswith(';'):
                        data += users_sockets[username].main_socket.recv(1)
                    messages = [m for m in data.split(';') if m != '']
                    for msg in messages:
                        print 'got message from user '+ username+ ' : '+ msg
                        MessageParser.parse(msg, username)
                else:
                    print username + "'s main socket disconnected"
                    MessageParser.parse_user_state_changed(0, username)
                    users_sockets[username].close()
                    users_sockets.pop(username, None)
                    continue
            except socket.error: pass
            
            #check all the sleeping sockets for disconnection
            if any(users_sockets[username].sleeping_sockets):
                ready_to_read, wr, er = select.select(users_sockets[username].sleeping_sockets, [], [], 0)
                for sock in ready_to_read:
                    try:
                        if not sock.recv(2):
                            print 'a sleeping socket from ' + username + ' had disconnected'
                            sock.close()
                            users_sockets[username].remove(sock)
                    except socket.error: pass
                
                
        time.sleep(1.0/60.0)
    print 'server thread ended'