예제 #1
0
def watcher():
    consecutives = 0
    while True:
        time.sleep(60.0)
        if Clients.count() > 0:
            consecutives = 0
        else:
            print '<<< Warning: Idling (%d) >>>' % consecutives
            consecutives += 1
            if consecutives == 3:
                halt_on_excess()
def watcher():
    consecutives = 0
    while True:
        time.sleep(60.0)
        if Clients.count() > 0:
            consecutives = 0
        else:
            print '<<< Warning: Idling (%d) >>>' % consecutives
            consecutives += 1
            if consecutives == 3:
                halt_on_excess()
예제 #3
0
def scraper():
    # Get area markers in which to place portals
    class Markers:
        left = None
        right = None

#    left = CModule.run_script_string('return tostring(getEntity(80).position)')[1:-1].split(',')
#    right = CModule.run_script_string('return tostring(getEntity(52).position)')[1:-1].split(',')

    while True:
        if Clients.count() == 0:
            time.sleep(1.5)
            continue

        # Get HTML and parse
        html = urllib.urlopen('http://www.syntensity.com:8888/tracker/instances/').read()
        servers = parse_servers(html)
        servers = select_relevant_servers(servers)

        # Apply to running script engine - done in main thread
        def main_operations():
            if not CModule.has_engine(): return

            if Markers.left is None:
                Markers.left = CModule.run_script_string('return tostring(getEntityByTag("portals_left").position)')[1:-1].split(',')
                Markers.right = CModule.run_script_string('return tostring(getEntityByTag("portals_right").position)')[1:-1].split(',')
                Markers.left = map(float, Markers.left)
                Markers.right = map(float, Markers.right)
                Markers.diff = [Markers.right[0]-Markers.left[0], Markers.right[1]-Markers.left[1], Markers.right[2]-Markers.left[2]]

            curr = Markers.left[:] # copy

            new_servers = []

            for server in servers:
                server.text = ('%s (%d/%d)' % (server.activity, server.players, server.max_players))
                # Check for existing
                uid = CModule.run_script_int(str('''
                    var __temp = filter(function(entity) {
                        return entity.targetIP === '%s' && entity.targetPort === %s;
                    }, getEntitiesByClass(getEntityClass('Portal')));
                    __temp.length === 1 ? __temp[0].uniqueId : -1;
                ''' % (server.host, server.port)), 'parse_instances')
                if uid != -1:
                    # Update portal
                    CModule.run_script(str('''
                        getEntity(%s).portalText = '%s';
                    ''' % (uid, server.text)), 'parse_instances')
                else:
                    new_servers.append(server)

            for server in new_servers:
                # Create portal
                CModule.run_script(str('''
                    GameManager.getSingleton().newDynaPortal = {
                        text: '%s',
                        x: %f,
                        y: %f,
                        z: %f,
                        targetIP: '%s',
                        targetPort: %s,
                        secondsLeft: 12,
                    };
                ''' % (
                    server.text,
                    curr[0], curr[1], curr[2],
                    server.host, server.port
                )), 'parse_instances')

                if len(new_servers) > 1:
                    for i in range(3):
                        curr[i] += Markers.diff[i]/(len(new_servers) - 1)

        main_actionqueue.add_action(main_operations)

        # Sleep
        time.sleep(12.5) # So our servers never overlap
예제 #4
0
def get_client_name(client_number):
    try:
        client = Clients.get(client_number)
        return client.username
    except Exception, e:
        return '?'
예제 #5
0
def scraper():
    # Get area markers in which to place portals
    class Markers:
        left = None
        right = None

    #    left = CModule.run_script_string('return tostring(getEntity(80).position)')[1:-1].split(',')
    #    right = CModule.run_script_string('return tostring(getEntity(52).position)')[1:-1].split(',')

    while True:
        if Clients.count() == 0:
            time.sleep(1.5)
            continue

        # Get HTML and parse
        html = urllib.urlopen("http://www.syntensity.com:8888/tracker/instances/").read()
        servers = parse_servers(html)
        servers = select_relevant_servers(servers)

        # Apply to running script engine - done in main thread
        def main_operations():
            if not CModule.has_engine():
                return

            if Markers.left is None:
                Markers.left = CModule.run_script_string('return tostring(getEntityByTag("portals_left").position)')[
                    1:-1
                ].split(",")
                Markers.right = CModule.run_script_string('return tostring(getEntityByTag("portals_right").position)')[
                    1:-1
                ].split(",")
                Markers.left = map(float, Markers.left)
                Markers.right = map(float, Markers.right)
                Markers.diff = [
                    Markers.right[0] - Markers.left[0],
                    Markers.right[1] - Markers.left[1],
                    Markers.right[2] - Markers.left[2],
                ]

            curr = Markers.left[:]  # copy

            new_servers = []

            for server in servers:
                server.text = "%s (%d/%d)" % (server.activity, server.players, server.max_players)
                # Check for existing
                uid = CModule.run_script_int(
                    str(
                        """
                    var __temp = filter(function(entity) {
                        return entity.targetIP === '%s' && entity.targetPort === %s;
                    }, getEntitiesByClass(getEntityClass('Portal')));
                    __temp.length === 1 ? __temp[0].uniqueId : -1;
                """
                        % (server.host, server.port)
                    ),
                    "parse_instances",
                )
                if uid != -1:
                    # Update portal
                    CModule.run_script(
                        str(
                            """
                        getEntity(%s).portalText = '%s';
                    """
                            % (uid, server.text)
                        ),
                        "parse_instances",
                    )
                else:
                    new_servers.append(server)

            for server in new_servers:
                # Create portal
                CModule.run_script(
                    str(
                        """
                    GameManager.getSingleton().newDynaPortal = {
                        text: '%s',
                        x: %f,
                        y: %f,
                        z: %f,
                        targetIP: '%s',
                        targetPort: %s,
                        secondsLeft: 12,
                    };
                """
                        % (server.text, curr[0], curr[1], curr[2], server.host, server.port)
                    ),
                    "parse_instances",
                )

                if len(new_servers) > 1:
                    for i in range(3):
                        curr[i] += Markers.diff[i] / (len(new_servers) - 1)

        main_actionqueue.add_action(main_operations)

        # Sleep
        time.sleep(12.5)  # So our servers never overlap
예제 #6
0
def get_client_name(client_number):
    try:
        client = Clients.get(client_number)
        return client.username
    except Exception, e:
        return '?'