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 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
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