+ obey_lines_in_file(io_db["path_worldconf"], "world config ",
+ do_record=True)
+ obey("MAKE_WORLD " + str(int(time.time())), "in file", do_record=True)
+ while True:
+ obey(read_command(), "in file", do_record=True)
+
+
+def command_ping():
+ """Send PONG line to server output file."""
+ io_db["file_out"].write("PONG\n")
+ io_db["file_out"].flush()
+
+
+def command_quit():
+ """Abort server process."""
+ raise SystemExit("received QUIT command")
+
+
+def set_world_db_integer_value(key, val_string, min, max):
+ """Set world_db[key] to int(val_string) if legal value >= min & <= max."""
+ try:
+ val = int(val_string)
+ if val < min or val > max:
+ raise ValueError
+ world_db[key] = val
+ except ValueError:
+ print("Ignoring: Please use integer >= " + str(min) + " and <= " +
+ "str(max)+ '.")
+
+
+def command_turn(turn_string):
+ """Set turn to what's described in turn_string."""
+ set_world_db_integer_value("TURN", turn_string, 0, 65535)
+
+
+def command_seedmap(mapseed_string):
+ """Set map seed to what's described in mapseed_string."""
+ set_world_db_integer_value("SEED_MAP", mapseed_string, 0, 4294967295)
+
+
+def command_seedrandomness(randseed_string):
+ """Set randomness seed to what's described in randseed_string."""
+ set_world_db_integer_value("SEED_RANDOMNESS", randseed_string, 0,
+ 4294967295)
+
+
+def command_makeworld(seed_string):
+ # Mere dummy so far.
+ set_world_db_integer_value("SEED_MAP", seed_string, 0, 4294967295)
+ set_world_db_integer_value("SEED_RANDOMNESS", seed_string, 0, 4294967295)
+
+
+"""Commands database.
+
+Map command start tokens to ([0]) minimum number of expected command arguments,
+([1]) the command's meta-ness (i.e. is it to be written to the record file, is
+it to be ignored in replay mode if read from server input file), and ([2]) a
+function to be called on it.
+"""
+commands_db = {
+ "QUIT": (0, True, command_quit),
+ "PING": (0, True, command_ping),
+ "MAKE_WORLD": (1, False, command_makeworld),
+ "SEED_MAP": (1, False, command_seedmap),
+ "SEED_RANDOMNESS": (1, False, command_seedrandomness),
+ "TURN": (1, False, command_turn)
+}
+
+
+"""World state database,"""
+world_db = {
+ "TURN": 0,
+ "SEED_MAP": 0,
+ "SEED_RANDOMNESS": 0
+}
+
+
+"""File IO database."""
+io_db = {
+ "path_save": "save",
+ "path_record": "record",
+ "path_worldconf": "confserver/world",
+ "path_server": "server/",
+ "path_in": "server/in",
+ "path_out": "server/out",
+ "path_worldstate": "server/worldstate",
+ "tmp_suffix": "_tmp",
+ "kicked_by_rival": False
+}
+
+
+try:
+ opts = parse_command_line_arguments()
+ setup_server_io()
+ # print("DUMMY: Run game.")
+ if None != opts.replay:
+ replay_game()
+ else:
+ play_game()