def radar_loop(): last_cycle = time.gmtime().tm_hour - 1 while True: start = time.gmtime() now = start stack = get_stack() while (len(stack) > 0 and start.tm_hour == now.tm_hour): nat = stack.pop() with dblock: while db[nat]["ts"].tm_hour == start.tm_hour: nat = stack.pop() try: entry = zombie_scan.scan_nation(nat) with dblock: db[nat] = entry for reg in region_names: if nat in regions[reg]: rcache.pop(reg, None) except api.CTE: with dblock: del db[nat] pass except: print "Exception on nation {0}".format(nat) raise save() now = time.gmtime() if now.tm_hour == start.tm_hour: next_hour = time.gmtime(timegm(now) + 3600) next_hour = time.struct_time( (next_hour.tm_year, next_hour.tm_mon, next_hour.tm_mday, next_hour.tm_hour, 0, 0, next_hour.tm_wday, next_hour.tm_yday, next_hour.tm_isdst)) tosleep = time.mktime(next_hour) - time.time() sleep(tosleep)
def radar_loop(): last_cycle = time.gmtime().tm_hour-1 while True: start = time.gmtime() now = start stack = get_stack() while( len(stack) > 0 and start.tm_hour == now.tm_hour ): nat = stack.pop() with dblock: while db[nat]["ts"].tm_hour == start.tm_hour: nat = stack.pop() try: entry = zombie_scan.scan_nation(nat) with dblock: db[nat] = entry for reg in region_names: if nat in regions[reg]: rcache.pop(reg, None) except api.CTE: with dblock: del db[nat] pass except: print "Exception on nation {0}".format(nat) raise save() now = time.gmtime() if now.tm_hour == start.tm_hour: next_hour = time.gmtime(timegm(now)+3600) next_hour = time.struct_time((next_hour.tm_year, next_hour.tm_mon, next_hour.tm_mday, next_hour.tm_hour, 0, 0, next_hour.tm_wday, next_hour.tm_yday, next_hour.tm_isdst)) tosleep = time.mktime(next_hour) - time.time() sleep(tosleep)
def on_arrival(reg, nat): if reg in region_names: with rlocks[reg]: regions[reg].add(nat) try: entry = zombie_scan.scan_nation(nat) except zombie_scan.ZombiesCloaked: entry = zombie_init.init_nation(nat) with dblock: db[nat] = entry rcache.pop(reg, None)
def handle_event(entry_delta): nat = entry_delta["name"] with dblock: if nat not in db: return entry = db[nat] last_update = entry["ts"] event_ts = entry_delta["ts"] if( event_ts.tm_hour > last_update.tm_hour or (event_ts.tm_hour == 0 and last_update.tm_hour != 0) ): entry = scan_nation(nat) with dblock: db[nat] = entry return if( event_ts < last_update ): return entry["ts"] = event_ts for key in ("zombies","survivors","dead"): if key in entry_delta: entry[key] += entry_delta[key] on_entry_change(entry)
db_copy[nat]["ts"] = ts json.dump(db_copy,open("zombies.json","w")) if os.path.isfile("zombies.json"): db = json.load(open('zombies.json','r')) hour_ago = time.gmtime(time.time()-3600) for nat in db: if "ts" in db[nat]: db[nat]["ts"] = time.gmtime(db[nat]["ts"]) else: db[nat]["ts"] = hour_ago zcloak = False for nat in set.union(*regions.values()) - frozenset(db.keys()): if not zcloak: try: entry = zombie_scan.scan_nation(nat) except zombie_scan.ZombiesCloaked: zcloak = True entry = zombie_init.init_nation(nat) else: entry = zombie_init.init_nation(nat) db[nat] = entry else: ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f %Z") print "{0} Initializing zombie data for the regions {1} (this may take a while)".format(ts, list(region_names)) db = zombie_init.initialize_nations(set.union(*regions.values())) ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f %Z") print "{0} Initialized zombie data, saving to zombies.json".format(ts) save() ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f %Z") print "{0} Saved initial zombie data to zombies.json".format(ts)
json.dump(db_copy, open("zombies.json", "w")) if os.path.isfile("zombies.json"): db = json.load(open('zombies.json', 'r')) hour_ago = time.gmtime(time.time() - 3600) for nat in db: if "ts" in db[nat]: db[nat]["ts"] = time.gmtime(db[nat]["ts"]) else: db[nat]["ts"] = hour_ago zcloak = False for nat in set.union(*regions.values()) - frozenset(db.keys()): if not zcloak: try: entry = zombie_scan.scan_nation(nat) except zombie_scan.ZombiesCloaked: zcloak = True entry = zombie_init.init_nation(nat) else: entry = zombie_init.init_nation(nat) db[nat] = entry else: ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f %Z") print "{0} Initializing zombie data for the regions {1} (this may take a while)".format( ts, list(region_names)) db = zombie_init.initialize_nations(set.union(*regions.values())) ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f %Z") print "{0} Initialized zombie data, saving to zombies.json".format(ts) save() ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f %Z")