[game, graphics] = [None, None]
def make_player(name, colour):
+ debug(name)
if name[0] == '@':
if name[1:] == "human":
return HumanPlayer(name, colour)
if s[0] == "network":
ip = None
port = 4562
+ #print str(s)
if len(s) > 1:
- ip = s[1]
+ if s[1] != "":
+ ip = s[1]
+ if len(s) > 2:
+ port = int(s[2])
if ip == None:
if colour == "black":
- port = 4563
+ port += 1
elif colour == "white":
- port = 4563
+ port += 1
return NetworkPlayer(colour, Network((ip, port)), None)
if s[0] == "internal":
sys.stderr.write(sys.argv[0] + " : Can't find an internal agent matching \"" + s[1] + "\"\n")
sys.stderr.write(sys.argv[0] + " : Choices are: " + str(map(lambda e : e[0], internal_agents)) + "\n")
return None
-
+ if s[0] == "fifo":
+ if len(s) > 1:
+ return FifoPlayer(s[1], colour)
+ else:
+ return FifoPlayer(str(os.getpid())+"."+colour, colour)
else:
return ExternalAgent(name, colour)
global always_reveal_states
global sleep_timeout
+
+ retry_illegal = False
+ server_addr = None
+
max_moves = None
src_file = None
i += 1
arg = argv[i]
if arg[0] != '-':
- p = make_player(arg, colour)
- if not isinstance(p, Player):
- sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
- return 100
- players.append(p)
- if colour == "white":
- colour = "black"
- elif colour == "black":
- pass
- else:
- sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+ players.append(arg)
continue
# Option parsing goes here
if len(f.split(":")) == 2:
max_moves = int(f.split(":")[1])
-
+
+ elif (arg[1] == '-' and arg[2:].split("=")[0] == "server"):
+ #debug("Server: " + str(arg[2:]))
+ if len(arg[2:].split("=")) <= 1:
+ server_addr = True
+ else:
+ server_addr = arg[2:].split("=")[1]
+
elif (arg[1] == '-' and arg[2:].split("=")[0] == "log"):
# Log file
if len(arg[2:].split("=")) == 1:
- log_files.append(LogFile(sys.stdout))
+ log_files.append(LogFile(sys.stdout,""))
else:
f = arg[2:].split("=")[1]
- if f[0] == '@':
+ if f == "":
+ log_files.append(LogFile(sys.stdout, ""))
+ elif f[0] == '@':
log_files.append(ShortLog(f[1:]))
else:
- log_files.append(LogFile(open(f, "w", 0)))
+ log_files.append(LogFile(open(f, "w", 0), f))
elif (arg[1] == '-' and arg[2:].split("=")[0] == "delay"):
# Delay
if len(arg[2:].split("=")) == 1:
sleep_timeout = -1
else:
sleep_timeout = float(arg[2:].split("=")[1])
-
+ elif (arg[1] == '-' and arg[2:] == "retry-illegal"):
+ retry_illegal = not retry_illegal
elif (arg[1] == '-' and arg[2:] == "help"):
# Help
os.system("less data/help.txt") # The best help function
return 0
-
-
+
+ # Dedicated server?
+
+ #debug("server_addr = " + str(server_addr))
+
+ if server_addr != None:
+ if server_addr == True:
+ return dedicated_server()
+ else:
+ if len(players) > 1:
+ sys.stderr.write("Only a single player may be provided when --server is used\n")
+ return 1
+ if len(players) == 1:
+ return client(server_addr, players[0])
+ else:
+ return client(server_addr)
+
+ for i in xrange(len(players)):
+ p = make_player(players[i], colour)
+ if not isinstance(p, Player):
+ sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
+ return 100
+ players[i] = p
+ if colour == "white":
+ colour = "black"
+ elif colour == "black":
+ pass
+ else:
+ sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+
# Create the board
# Construct a GameThread! Make it global! Damn the consequences!
board = Board(style)
board.max_moves = max_moves
game = GameThread(board, players)
+ game.retry_illegal = retry_illegal
# If there are no players listed, display a nice pretty menu
if len(players) != 2:
if graphics != None:
+
+ server_addr = graphics.SelectServer()
+ if server_addr != None:
+ pygame.quit() # Time to say goodbye
+ if server_addr == True:
+ return dedicated_server()
+ else:
+ return client(server_addr)
+
players = graphics.SelectPlayers(players)
else:
sys.stderr.write(sys.argv[0] + " : Usage " + sys.argv[0] + " white black\n")
players[i] = NetworkPlayer(old[i].colour, p.network, old[i])
for p in players:
- debug(str(p))
+ #debug(str(p))
if isinstance(p, NetworkPlayer):
p.board = game.board
if not p.network.connected:
sys.stdout.write(game.final_result + "\n")
return error
+
+
+
+
+
+
+
# This is how python does a main() function...
if __name__ == "__main__":
+ retcode = 0
try:
- sys.exit(main(sys.argv))
+ retcode = main(sys.argv)
except KeyboardInterrupt:
sys.stderr.write(sys.argv[0] + " : Got KeyboardInterrupt. Stopping everything\n")
if isinstance(graphics, StoppableThread):
game.stop()
if game.is_alive():
game.join()
-
- sys.exit(102)
+ retcode = 102
+ #except Exception, e:
+ # sys.stderr.write(sys.argv[0] + " : " + e.message + "\n")
+ # retcode = 103
+
+ try:
+ sys.stdout.close()
+ except:
+ pass
+ try:
+ sys.stderr.close()
+ except:
+ pass
+ sys.exit(retcode)
+