Пример #1
0
def main():
    # start local server to respond to pings and whatnot
    thrd = threading.Thread(target=server.loop, 
                            args=(protocol.node.handler,))
    thrd.daemon = True # to ensure program exits even if thrd still runs
    thrd.start()

    while 1:
        # look for things the server might want to know
        local_changes = statistics.gather()
        print 'Local changes:',local_changes
        node_changes = watcher.gather()
        print 'Node changes:',node_changes

        # and send them to the server
        try:
            s = client.connect(MASTER_ADDR)
            # 1: data push
            request = protocol.master.push_request(local_changes, node_changes)
            stamp,version,do_clear_cache = protocol.master.push_response(
                                                        client.ask(s, request))
            print 'Data pushed to server.'
            if do_clear_cache:
                print 'Cache cleared due to server request.'
                statistics.cache = {}
                watcher.cache = {}
            # check if we're out of date
            if version>conf.VERSION:
                print 'Client of out date!'
                print 'Version %d, latest is %d.' % (conf.VERSION, version)
                print 'Exiting.'
                import sys
                sys.exit(1)
            # 2: node list request
            print 'Node timestamps, server:',stamp,'mine:',neighbours.stamp
            if stamp!=neighbours.stamp:
                # request update!
                request = protocol.master.nodes_request()
                stamp,nodes = protocol.master.nodes_response(
                                                    client.ask(s, request))
                print 'Received',len(nodes),' new nodes with stamp:',stamp
                neighbours.set(stamp,nodes)
            client.close(s)
        except:
            import traceback
            traceback.print_exc()
            print 'Failed to connect to server. Aborting communication.'
            # since the server didn't get our date (and is probably down!)
            # we really should clear our cache, to ensure the server gets a 
            # full picture
            statistics.cache = {}
            watcher.cache = {}
        
        # then wait, to not waste resourses
        print 'Sleeping...'
        try: 
            time.sleep(POLLING_INTERVAL)
        except KeyboardInterrupt:
            print 'Exiting.'
            return 0
Пример #2
0
def multiplayer(server):
    events = []

    client = socket_connection.client(server)

    players = client.ask(repr(["get_players", "",
                               ""])).replace("\n", "").replace("\r",
                                                               "").split(",")
    #M# Menü unterschiedlich gestalten jenachdem wie viele Spieler es gibt
    # und ob das erstellen neuer Spieler erlaubt ist
    playerlist = ([("Select Player", 1,
                    (127, 0, 255))] + [(player, )
                                       for player in players] + [("Back", )])
    i_player = Display.menu(playerlist)[0]
    if i_player == -1:
        return -1
    if i_player == len(playerlist) - 1:
        return 0
    playername = playerlist[i_player][0]

    password = ""

    random_key = client.ask(repr(["random_key", playername, ""]))
    random_key = random_key.replace("\n", "").replace("\r", "")
    combined_key = password + random_key
    hashed_combined_key = hashlib.md5(combined_key).hexdigest()
    reply = client.ask(repr(["login", playername, hashed_combined_key]))
    print reply
    if reply.startswith("access denied"):
        return

    #Display = IOlib.Display(datadir,playername,controlsfile)

    t = time.time()
    while True:
        objectlist = Display.get_required_objects()
        # client -> server: events, playername, objectlist
        request = repr([events, playername, objectlist])
        answer = client.ask(request)
        displaydata = ast.literal_eval(answer)
        # server -> client: displaydata
        if "QUIT" in [event[0] for event in events]:
            break  #muss nach Datenübertragung kommen, damit server quit event noch bekommt
        events = Display.show(displaydata, playername)
        while time.time() - t < 0.0625:
            time.sleep(0.001)
        t += 0.0625

    return 0
Пример #3
0
def has_monitord(hostname):
    'Check if the host has monitord runing by trying to connect and ping.'
    try:
        s = client.connect(hostname)
        return client.ask(s, protocol.node.ping())=='pong'
    except:
        return False
Пример #4
0
def multiplayer(server):
    events = []

    client = socket_connection.client(server)

    players = client.ask(repr(["get_players","",""])).replace("\n","").replace("\r","").split(",")
    #M# Menü unterschiedlich gestalten jenachdem wie viele Spieler es gibt
    # und ob das erstellen neuer Spieler erlaubt ist
    playerlist = ([("Select Player",1,(127,0,255))]+
                  [(player,) for player in players]+
                  [("Back",)])
    i_player = Display.menu(playerlist)[0]
    if i_player == -1:
        return -1
    if i_player == len(playerlist)-1:
        return 0
    playername = playerlist[i_player][0]

    password = ""

    random_key = client.ask(repr(["random_key",playername,""]))
    random_key = random_key.replace("\n","").replace("\r","")
    combined_key = password+random_key
    hashed_combined_key = hashlib.md5(combined_key).hexdigest()
    reply = client.ask(repr(["login",playername,hashed_combined_key]))
    print reply
    if reply.startswith("access denied"):
        return

    #Display = IOlib.Display(datadir,playername,controlsfile)

    t = time.time()
    while True:
        objectlist = Display.get_required_objects()
        # client -> server: events, playername, objectlist
        request = repr([events,playername,objectlist])
        answer = client.ask(request)
        displaydata = ast.literal_eval(answer)
        # server -> client: displaydata
        if "QUIT" in [event[0] for event in events]:
            break #muss nach Datenübertragung kommen, damit server quit event noch bekommt
        events = Display.show(displaydata,playername)
        while time.time()-t<0.0625:
            time.sleep(0.001)
        t+=0.0625

    return 0