Esempio n. 1
0
        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();
              }
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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();
              }
        }