public void StartServerGame(GameStartMode startMode) { PlayerInfo thisPlayer = CreateLocalPlayerInfo(); // --------------------------------------------------------------- // choose game parameters or pick a saved game and start to listen // --------------------------------------------------------------- ServerStartNewGameModel newGameData = null; ServerStartSavedGameModel savedGameData = null; ServerListener listener = new ServerListener(thisPlayer, servicesProvider, SettingsManager.Settings.ListenPort); try { bool proceed = false; switch(startMode) { case GameStartMode.NewGame: { var initView = viewFactory.CreateServerStartNewGameView(); var initModel = new ServerStartNewGameModel(); var initController = new ServerStartNewGameController(initModel, initView, listener, servicesProvider); initController.DeckRoomRequest += new Func<DeckItem>(initController_DeckRoomRequest); if(initView.ShowModal() == ViewResult.Ok) { proceed = true; initModel.Deck.MainCards.Shuffle(); newGameData = initModel; } } break; case GameStartMode.SavedGame: { var initView = viewFactory.CreateServerStartSavedGameView(); var initModel = new ServerStartSavedGameModel(); var initController = new ServerStartSavedGameController(initModel, initView, listener, servicesProvider); if(initView.ShowModal() == ViewResult.Ok) { proceed = true; savedGameData = initModel; } } break; } if(proceed) { // --------------------------------------------------------------------------------- // open room, wait other players and chat (obtain clients channels and players list) // --------------------------------------------------------------------------------- var serverStarterModel = new ServerStarterModel(thisPlayer); var serverStarterView = viewFactory.CreateServerStarterView(); proceed = false; using(NetCommandHandler<IGameStarterModel> commandHandler = new NetCommandHandler<IGameStarterModel>(serverStarterModel, thisPlayer.NickName)) { var serverStarterController = new ServerStarterController(commandHandler, serverStarterModel, listener, serverStarterView, thisPlayer, servicesProvider, startMode, newGameData, savedGameData); listener.Console = serverStarterModel.Console; proceed = serverStarterView.ShowModal() == ViewResult.Ok; } if(proceed) { // ---------- // start game // ---------- listener.Console = null; listener.GameIsRunning = true; switch(startMode) { case GameStartMode.NewGame: { var players = CreatePlayerAccounts(thisPlayer.NickName, serverStarterModel.Players.ToList()); for(int i = 0; i < listener.PlayerConnections.Count; i++) players[i+1].Channel = listener.PlayerConnections[i].NetClient; StartGame(players, null, GameType.Host); } break; case GameStartMode.SavedGame: { var players = CreatePlayerAccounts(thisPlayer.NickName, serverStarterModel.SavedGame); for(int i = 0; i < listener.PlayerConnections.Count; i++) players[i+1].Channel = listener.PlayerConnections[i].NetClient; StartGame(players, serverStarterModel.SavedGame, GameType.Host); } break; } } } } finally { if(listener.IsStarted) listener.Stop(); } }
bool RunRestartGame(List<PlayerAccountData> players, GameType gameType) { bool exitGame = false; if(gameType == GameType.Host) { var serverRestarterModel = new ServerRestarterModel(); var serverRestartGameView = viewFactory.CreateServerRestartGameView(); using(var commandHandler = new NetCommandHandler<IGameRestarterModel>(serverRestarterModel, players.First().Info.NickName)) { foreach(var player in players.Where(e => e.Channel != null)) commandHandler.AddChannel(player.Channel, player.Info.NickName); var serverRestartGameController = new ServerRestarterController(commandHandler, serverRestarterModel, players, serverRestartGameView, servicesProvider); serverRestartGameController.SideboardingEditorRequest += new SideboardingEditorRequestEventHandler(serverRestartGameController_SideboardingEditorRequest); if(serverRestartGameView.ShowModal() == ViewResult.Ok) UpdatePlayersForRestart(players, serverRestarterModel.Players.Cast<PoL.Models.GameRestarters.PlayerModel>()); else exitGame = true; } } else { var clientRestarterModel = new ClientRestarterModel(); var clientRestartGameView = viewFactory.CreateClientRestartGameView(); using(var commandHandler = new NetCommandHandler<IGameRestarterModel>(clientRestarterModel, players.First().Info.NickName)) { foreach(var player in players.Where(e => e.Channel != null)) commandHandler.AddChannel(player.Channel, player.Info.NickName); var clientRestartGameController = new ClientRestarterController(commandHandler, clientRestarterModel, players, clientRestartGameView, servicesProvider); clientRestartGameController.SideboardingEditorRequest += new SideboardingEditorRequestEventHandler(serverRestartGameController_SideboardingEditorRequest); if(clientRestartGameView.ShowModal() == ViewResult.Ok) UpdatePlayersForRestart(players, clientRestarterModel.Players.Cast<PoL.Models.GameRestarters.PlayerModel>()); else exitGame = true; } } return exitGame; }
public void StartClientGame(GameStartMode startMode) { PlayerInfo thisPlayer = CreateLocalPlayerInfo(); // ---------------------------------------------------------- // choose game parameters and connect (obtain server channel) // ---------------------------------------------------------- ClientConnector connector = new ClientConnector(thisPlayer, servicesProvider); try { var initView = viewFactory.CreateClientInitializationView(startMode); var initModel = new ClientInitializationModel(); var initController = new ClientInitializationController(initModel, initView, thisPlayer, connector, servicesProvider); initController.DeckRoomRequest += new Func<DeckItem>(initController_DeckRoomRequest); if(initView.ShowModal() == ViewResult.Ok) { // ------------------------------------------------------------ // open room, wait other players and chat (obtain players list) // ------------------------------------------------------------ var clientStarterModel = new ClientStarterModel(thisPlayer, initModel.Deck, servicesProvider); var clientStarterView = viewFactory.CreateClientStarterView(); bool proceed = false; using(var commandHandler = new NetCommandHandler<IGameStarterModel>(clientStarterModel, thisPlayer.NickName)) { commandHandler.AddChannel(initModel.ServerData.Channel, initModel.ServerData.Player.NickName); var clientStarterController = new ClientStarterController(commandHandler, clientStarterModel, connector, clientStarterView, servicesProvider, initModel); proceed = clientStarterView.ShowModal() == ViewResult.Ok; } if(proceed) { // ---------- // start game // ---------- switch(startMode) { case GameStartMode.NewGame: { var players = CreatePlayerAccounts(thisPlayer.NickName, clientStarterModel.Players.ToList()); players.Single(e => e.Info.NickName == initModel.ServerData.Player.NickName).Channel = initModel.ServerData.Channel; StartGame(players, null, GameType.Client); } break; case GameStartMode.SavedGame: { var players = CreatePlayerAccounts(thisPlayer.NickName, clientStarterModel.SavedGame); players.Single(e => e.Info.NickName == initModel.ServerData.Player.NickName).Channel = initModel.ServerData.Channel; StartGame(players, clientStarterModel.SavedGame, GameType.Client); } break; } } } } finally { if(connector.IsConnected) connector.Disconnect(); } }