private void createServer() { if (serverThread == null) { CreateServerThreadArguments args = new CreateServerThreadArguments(); CanCreate = false; BaseEngine server = null; WcfEngineHost binaryHelper = new WcfEngineHost(); waitHandle = new ManualResetEvent(false); switch (SelectedGame) { case ServerGame.FiveCardDraw: server = new FiveGameDrawServer(binaryHelper); break; case ServerGame.TexasHoldem: server = new TexasHoldemServer(binaryHelper); break; case ServerGame.SevenCardStud: server = new SevenCardStudServer(binaryHelper); break; case ServerGame.OmahaHoldem: server = new OmahaHoldemServer(binaryHelper); break; } binaryHelper.Initialize(server, SelectedGame, Port, waitHandle); if (multiplayer.IsChecked.Value) { server.GameStarted += new DataEventHandler <IEnumerable <Player> >(server_GameStarted); } playerLimit = server.MaximalPlayersLimit; args.game = server; NewServerConfiguration config = ConfigurationAccess.Current.NewServerConfiguration; config.TournamentMode = server.TournamentMode = TournamentMode; config.AcceptsNewPlayers = server.AcceptPlayersAfterGameStart = AcceptsNewPlayers; config.Ante = server.Ante = Ante; config.SmallRaise = server.SmallRaise = SmallRaise; config.RaiseLimit = server.RaiseLimit = RaiseLimit; config.StartingMoney = server.StartingMoney = StartingMoney; config.PlayerTimeLimit = server.ActionTimeout = TimeLimit; config.AutoRaiseOnHand = server.AutoIncreaseOnHandDivider = AutoRaiseOnHand; config.SelectedGame = args.gameMode = SelectedGame; config.BotCount = args.botCount = BotCount; config.Port = args.port = Port; ServerAddress = "localhost"; ServerPort = Port; waitHandle.Reset(); serverThread = new Thread(new ParameterizedThreadStart(StartServer)); serverThread.Start(args); serverThread.Name = "Game Server Thread"; serverThread.IsBackground = true; if (multiplayer.IsChecked.Value) { binaryHelper.PlayerConnected += new DataEventHandler <Player>(client_NewUserConnected); } } }
/// <summary> /// The console application entry class /// </summary> /// <param name="args"> /// The command line arguments. /// </param> static void Main(string[] args) { try { // print the command line usage if the arguments do not match if (args.Length < 2) { Console.WriteLine("Usage: <server address | Game Mode> <port>"); Console.WriteLine("server address: ip or dns"); Console.WriteLine("Game Mode: texas,five,seven,omaha"); Console.WriteLine("port: the port in which the server runs"); } else { int port = -1; string serverIp = string.Empty; ServerGame game = ServerGame.FiveCardDraw; port = int.Parse(args[1]); // test to see if the game mode is recognized if (args[0] == "texas") { game = ServerGame.TexasHoldem; } else if (args[0] == "five") { game = ServerGame.FiveCardDraw; } else if (args[0] == "seven") { game = ServerGame.SevenCardStud; } else if (args[0] == "omaha") { game = ServerGame.OmahaHoldem; } else // assume the argument is an ip or dns { serverIp = args[0]; } // found a match to the game if (serverIp == string.Empty) { BaseEngine server = null; WcfEngineHost binaryHelper = new WcfEngineHost(); switch (game) { case ServerGame.FiveCardDraw: server = new FiveGameDrawServer(binaryHelper); break; case ServerGame.TexasHoldem: server = new TexasHoldemServer(binaryHelper); break; case ServerGame.SevenCardStud: server = new SevenCardStudServer(binaryHelper); break; case ServerGame.OmahaHoldem: server = new OmahaHoldemServer(binaryHelper); break; } System.Threading.ManualResetEvent waitHandle = new System.Threading.ManualResetEvent(false); binaryHelper.Initialize(server, game, port, waitHandle); // initialize the server and run until the game is over server.Initialize(); Console.WriteLine("Press enter to stop the registration"); Console.ReadLine(); waitHandle.Set(); server.Run(); waitHandle.Close(); } else { // if the arguments count is higher than 2 assume the process started will be played by an AI engine. bool useAi = args.Length > 2; // this is the base client which will hold the connected game ClientHelperBridge clientBridge = new ClientHelperBridge(); RulesInterpreterBridge rulesBridge = new RulesInterpreterBridge(); BaseWcfClient client = new BaseWcfClient(clientBridge); clientBridge.ClientHelper = new ConsoleClientHelper(rulesBridge); ServerDetails result = client.Initialize(serverIp, port); // check the result of the connection if (result.CanConnect) { IClientHelper outerClient = null; if (useAi) { switch (result.Game) { case ServerGame.FiveCardDraw: outerClient = new FiveGameDrawClient(new AiFiveCardDrawClient(new ConsoleFiveGameDrawClient(rulesBridge), rulesBridge)); break; case ServerGame.OmahaHoldem: outerClient = new OmahaHoldemClient(new AiClientHelper(new ConsoleTexasHoldemClient(rulesBridge, 4), rulesBridge)); break; case ServerGame.SevenCardStud: outerClient = new GameClient <SevenCardStudGame>(new AiClientHelper(new ConsoleClientHelper(rulesBridge), rulesBridge)); break; case ServerGame.TexasHoldem: outerClient = new GameClient <TexasHoldem>(new AiClientHelper(new ConsoleTexasHoldemClient(rulesBridge), rulesBridge)); break; } } else { switch (result.Game) { case ServerGame.FiveCardDraw: outerClient = new FiveGameDrawClient(new ConsoleFiveGameDrawClient(rulesBridge)); break; case ServerGame.OmahaHoldem: outerClient = new OmahaHoldemClient(new ConsoleTexasHoldemClient(rulesBridge, 4)); break; case ServerGame.SevenCardStud: outerClient = new GameClient <SevenCardStudGame>(new ConsoleClientHelper(rulesBridge)); break; case ServerGame.TexasHoldem: outerClient = new GameClient <TexasHoldem>(new ConsoleTexasHoldemClient(rulesBridge)); break; } } IRulesInterpreter interpreter = (IRulesInterpreter)outerClient; rulesBridge.Interpreter = interpreter; if (result.Game == ServerGame.FiveCardDraw) { clientBridge.FiveCardHelper = (IFiveCardClientHelper)outerClient; } else { clientBridge.ClientHelper = outerClient; } client.Connect(); // run until the game is over client.Run(); client.Disconnect(); } else { Console.WriteLine("Game is in progress. Server refused connection"); } } } } catch (Exception e) { // an error occured. print an unfriendly message Console.WriteLine("Uh oh, I did bad"); // when a debugger is attached, break it so you can learn of the error. if (System.Diagnostics.Debugger.IsAttached) { Console.WriteLine(e.Message); System.Diagnostics.Debugger.Break(); } } }