def proc_flags(self, blue_obj, flag_name, flag): if "value" in flag: value = flag["value"] else: raise Exception("No value given for flag %s!" % flag_name) if "answer" in flag: this_answer = flag["answer"] else: raise Exception("No answer given for flag %s!" % flag_name) if "score" in flag: this_score = flag["score"] blue_obj.add_flag(flag_name, value, score=this_score, answer=this_answer) else: blue_obj.add_flag(flag_name, value, answer=this_answer) if __name__ == "__main__": from FlagStore import FlagStore from Logger import Logger from Queue import Queue queue_obj = Queue() logger_obj = Logger("JsonConfigTesT") flag_store = FlagStore(logger_obj, queue_obj, "test") json_obj = JsonConfig("scorebotcfg.json", flag_store) (blueteams, injects) = json_obj.process() for blueteam in blueteams: print blueteam.get_teamname()
elif o in ("-b", "--binjitsu"): globalvars.binjitsu = True elif o in ("-v", "--verbose"): globalvars.verbose = True elif o in ("-q", "--quick"): globalvars.quick = True elif o in ("-q", "--quick"): globalvars.quick = True elif o in ("-n", "--nomovie"): globalvars.nomovie = True else: assert False, "unhandled option" flag_queue_obj = Queue.Queue() message_queue_obj = Queue.Queue() logger_obj = Logger("scorebot") flag_store = FlagStore(logger_obj, flag_queue_obj) message_store = MessageStore(logger_obj, message_queue_obj) flag_server = FlagServer(logger_obj, flag_queue_obj, message_queue_obj) t = threading.Thread(target=flag_server.serve_forever) t.start() blue_teams = read_config(cfg_file, flag_store) myscoreboard = Scoreboard(blue_teams, flag_store, message_store) myscoreboard.start() for team in blue_teams.keys(): blue_teams[team].add_queue(flag_queue_obj) blue_teams[team].start() flag_store.start() message_store.start() injects.start()
def __init__(self, db_col, cfg_file="scorebotcfg.json", obj_id=None): threading.Thread.__init__(self) self.col = db_col self.flag_queue = Queue.Queue() self.flag_answer_queue = Queue.Queue() self.msg_queue = Queue.Queue() self.logger_obj = Logger("scorebot") self.oqueue = Queue.Queue() self.equeue = Queue.Queue() self.logger = ThreadedLogger("ctfgame.log", self.oqueue, self.equeue) self.logger.start() self.pp = pprint.PrettyPrinter(indent=2) self.blues_queues = {} self.teams_rounds = {} # todo - fix why this isn't actually the first round! self.this_round = 1 self.interval = 120 self.inround = False self.go_time = time.time() self.save_time = time.time() self.save_interval = 10 if obj_id: bson_id = ObjectId(obj_id) self.obj_id = bson_id json_obj = self.col.find_one(self.obj_id) if globalvars.debug: self.pp.pprint(json_obj) game = jaraco.modb.decode(decode_dict(json_obj)) if "config" in game: self.flag_store = FlagStore(self.logger_obj, self.flag_queue, self.flag_answer_queue) self.json_cfg_obj = JsonConfig(cfg_file, self.flag_store) (self.blue_teams, self.injects) = self.json_cfg_obj.process(game["config"]) else: raise Exception("No config section in restore object!") self.message_store = MessageStore(self.logger_obj, self.msg_queue) self.flag_server = FlagServer(self.logger_obj, self.flag_queue, self.flag_answer_queue, self.msg_queue) for team in self.blue_teams.keys(): self.blue_teams[team].add_queue(self.flag_queue) if "scores" in game: scores = game["scores"] if "blueteams" in scores: for team in self.blue_teams: if team in scores["blueteams"]: blue_score = scores["blueteams"][team] self.blue_teams[team].set_scores(blue_score) else: raise Exception( "Missing scores for team %s in restore object!" % team) else: raise Exception( "Missing blueteams score block in restore object!" % team) else: raise Exception("Missing scores block in restore object!" % team) if "flags" in game: all_flags = game["flags"] self.flag_store.restore(all_flags) else: self.obj_id = obj_id self.flag_store = FlagStore(self.logger_obj, self.flag_queue, self.flag_answer_queue) self.json_cfg_obj = JsonConfig(cfg_file, self.flag_store) (self.blue_teams, self.injects) = self.json_cfg_obj.process() self.message_store = MessageStore(self.logger_obj, self.msg_queue) self.flag_server = FlagServer(self.logger_obj, self.flag_queue, self.flag_answer_queue, self.msg_queue) for team in self.blue_teams.keys(): self.blue_teams[team].add_queue(self.flag_queue) blue_queue = Queue.Queue() self.blues_queues[team] = blue_queue self.blue_teams[team].set_queue(blue_queue) self.teams_rounds[team] = True self.movies = Movies(self.logger_obj) #self.movies.set_movie() self.bottle_server = BottleServer(self.blue_teams, self.flag_store, self.message_store, self.movies, '0.0.0.0', 8090)
elif o in ("-q", "--quick"): globalvars.quick = True elif o in ("-n", "--nomovie"): globalvars.nomovie = True elif o in ("-r", "--resume"): resume = True else: assert False, "unhandled option" if resume: filename = "scorebotcfg.json" config = open(filename) blueteams_cfg, injects_cfg = config.read().split("\n\n\n") flag_queue_obj = Queue.Queue() message_queue_obj = Queue.Queue() logger_obj = Logger("scorebot") flag_store = FlagStore(logger_obj, flag_queue_obj, dbname) message_store = MessageStore(logger_obj, message_queue_obj) flag_server = FlagServer(logger_obj, flag_queue_obj, message_queue_obj) t = threading.Thread(target=flag_server.serve_forever) t.start() blue_teams = resume_blueTeams(flag_store) get_injects(config, blue_teams) myscoreboard = Scoreboard(blue_teams, flag_store, message_store) myscoreboard.start() for team in blue_teams.keys(): blue_teams[team].add_queue(flag_queue_obj) blue_teams[team].start() flag_store.start() message_store.start() injects.start() else: