Exemplo n.º 1
0
        static void StartGame(Arguments args)
        {
            PlayerConfig playerConfig;

            try
            {
                playerConfig = new ConfigFileReader().ReadConfigFile(args.ConfigPath);
            }
            catch (FileNotFoundException)
            {
                logger.Fatal($"Error: Config file {args.ConfigPath} does not exist!");
                return;
            }
            catch (InvalidDataException)
            {
                logger.Fatal($"Error: File {args.ConfigPath} is invalid!");
                return;
            }
            catch (Exception e)
            {
                logger.Fatal(e.Message);
                return;
            }
            playerConfig.GameName = args.GameName;

            using (var communicator = new Communicator(args.CommunicationServerAddress, args.CommunicationServerPort))
            {
                var gameService     = new GameService(communicator);
                var playerState     = new PlayerState(playerConfig);
                var messageProvider = new MessageProvider(playerState, communicator);
                var actionExecutor  = new ActionExecutor(messageProvider, playerState);
                AbstractStrategy strategy;
                switch (playerConfig.Strategy)
                {
                case "blocker":
                    strategy = new BlockerStrategy(playerState, actionExecutor);
                    break;

                case "sector":
                    strategy = new SectorStrategy(playerState, actionExecutor);
                    break;

                default:
                    strategy = new TrivialStrategy(playerState, actionExecutor);
                    break;
                }
                var player = new Player(playerConfig, gameService, messageProvider, playerState, actionExecutor, strategy);

                try
                {
                    player.Start();
                }
                catch (PlayerRejectedException e)
                {
                    logger.Fatal("Connection rejected: " + e.Message);
                }
                catch (OperationCanceledException e)
                {
                    logger.Fatal(e.Message);
                }
                catch (TimeoutException e)
                {
                    logger.Fatal(e.Message);
                }
                catch (SocketException e)
                {
                    logger.Fatal("Connection failed: " + e.Message);
                }
                catch (IOException e)
                {
                    logger.Fatal(e.Message);
                }
                catch (GameAlreadyFinishedException e)
                {
                    logger.Info(e.Message);
                }
                finally
                {
                    logger.Info("Player disconnected.");
                }
            }
        }