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); } } }
private void StartServer(object threadArguments) { try { CreateServerThreadArguments args = (CreateServerThreadArguments)threadArguments; BaseEngine server = args.game; server.Initialize(); Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(serverInitialized)); if (args.botCount > 0) { spawBots(args.botCount, args.gameMode, args.port); } Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(serverIsUp)); server.Run(); } catch { } finally { serverThread = null; } }