コード例 #1
0
ファイル: runner.py プロジェクト: Eluvatar/zombie-radar
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)
コード例 #2
0
ファイル: runner.py プロジェクト: Eluvatar/zombie-radar
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)
コード例 #3
0
ファイル: runner.py プロジェクト: Eluvatar/zombie-radar
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)
コード例 #4
0
ファイル: runner.py プロジェクト: Eluvatar/zombie-radar
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)
コード例 #5
0
ファイル: zombiedar.py プロジェクト: Eluvatar/zombie-radar
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)
コード例 #6
0
ファイル: runner.py プロジェクト: Eluvatar/zombie-radar
            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)
コード例 #7
0
ファイル: runner.py プロジェクト: Eluvatar/zombie-radar
    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")