예제 #1
0
        public GameSimulation(string configFilePath, Dictionary <TeamColor, StrategyGroup> strategyGroups)
        {
            var port       = Constants.DefaultPortNumber;
            var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
            var ipAddress  = ipHostInfo.AddressList[0];

            var configLoader        = new XmlLoader <GameConfiguration>();
            var config              = configLoader.LoadConfigurationFromFile(configFilePath);
            var keepAliveInterval   = TimeSpan.FromMilliseconds((int)config.KeepAliveInterval);
            var communicationClient = new AsynchronousCommunicationClient(new IPEndPoint(ipAddress, port), keepAliveInterval,
                                                                          MessageSerializer.Instance);


            CommunicationServer =
                new CommunicationServer.CommunicationServer(MessageSerializer.Instance, keepAliveInterval, port, new ErrorsMessagesFactory(), LoggingMode.NonVerbose, ipAddress);
            GameMaster = new GameMaster.GameMaster(config, communicationClient, "game", new ErrorsMessagesFactory(), LoggingMode.NonVerbose, new GameMasterMessageFactory());
            Players    = new List <Player.Player>();
            for (var i = 0; i < 2 * config.GameDefinition.NumberOfPlayersPerTeam; i++)
            {
                communicationClient = new AsynchronousCommunicationClient(new IPEndPoint(ipAddress, port), keepAliveInterval,
                                                                          MessageSerializer.Instance);
                var player = new Player.Player(communicationClient, "game", TeamColor.Blue, PlayerType.Leader, new ErrorsMessagesFactory(), LoggingMode.NonVerbose, strategyGroups);
                Players.Add(player);
            }

            GameMaster.GameFinished += GameMaster_GameFinished;
        }
예제 #2
0
        public void SecondGameMaster_ShouldNotGetAnyMessages()
        {
            var testComponents = InitializeTest(7);

            testComponents.CsTask.Start();
            Thread.Sleep(100);

            testComponents.GameMaster.ConnectToCommunicationServer();
            testComponents.Agent.ConnectToCommunicationServer();

            var secondGameMaster = new GameMaster.GameMaster(testComponents.GameMaster.Configuration);

            secondGameMaster.ConnectToCommunicationServer();

            var messageToSend = MessageFactory.GetMessage(new JoinRequest(TeamId.Blue));

            testComponents.Agent.SendMessage(messageToSend, false);

            Thread.Sleep(100);
            var receivedMessage = secondGameMaster.NetworkComponent.GetIncomingMessages().FirstOrDefault();

            Assert.IsNull(receivedMessage);

            var actualReceivedMessage = testComponents.GameMaster.NetworkComponent.GetIncomingMessages().FirstOrDefault();

            Assert.IsNotNull(actualReceivedMessage);

            //Make sure CS has not failed
            Thread.Sleep(100);
            Assert.AreEqual(TaskStatus.Running, testComponents.CsTask.Status);

            Assert_CommunicationServerSuccessfullyKilled(testComponents);
        }
        public void ParseWithPlayersMessageStateForGUI()
        {
            GameMaster.GameMaster gm  = new GameMaster.GameMaster();
            GameMasterBoard       gmb = new GameMasterBoard(2, 1, 2);
            Position goal             = new Position(1, 0);
            Position piece            = new Position(1, 1);

            gm.teamRedGuids  = new List <GameMaster.PlayerGuid>();
            gm.teamBlueGuids = new List <GameMaster.PlayerGuid>();

            //gm.teamRedGuids.Add("8");
            //gm.teamBlueGuids.Add("9");

            //gmb.cellsGrid[0, 0].SetPlayerGuid(gm.teamRedGuids[0]);
            //gmb.cellsGrid[0, 2].SetPlayerGuid(gm.teamBlueGuids[0]);

            gmb.SetGoal(goal);
            gmb.GetCell(piece).SetCellState(CellState.Piece);
            gm.board = gmb;

            string expected = "s;7,r,8,4,0,2,7,b,9,0,0,0;";
            string result   = gm.MessageStateForGUI();

            Assert.AreEqual(CellState.Valid, gm.board.GetCell(goal).GetCellState());
            Assert.AreEqual(CellState.Piece, gm.board.GetCell(piece).GetCellState());
            Assert.AreEqual(expected, result);
        }
예제 #4
0
        public void MessagesFromSecondGameMaster_ShouldBeIgnored()
        {
            var testComponents = InitializeTest(6);

            testComponents.CsTask.Start();
            Thread.Sleep(100);

            testComponents.GameMaster.ConnectToCommunicationServer();
            testComponents.Agent.ConnectToCommunicationServer();

            var secondGameMaster = new GameMaster.GameMaster(testComponents.GameMaster.Configuration);

            secondGameMaster.ConnectToCommunicationServer();

            var messageToSend = MessageFactory.GetMessage(new JoinResponse(true, 1), 1);

            secondGameMaster.SendMessage(messageToSend);

            Thread.Sleep(100);
            var receivedMessage = testComponents.Agent.NetworkComponent.GetIncomingMessages().FirstOrDefault();

            Assert.IsNull(receivedMessage);

            //Make sure CS has not failed
            Thread.Sleep(100);
            Assert.AreEqual(TaskStatus.Running, testComponents.CsTask.Status);

            Assert_CommunicationServerSuccessfullyKilled(testComponents);
        }
예제 #5
0
        public void Setup()
        {
            config     = GameMasterConfiguration.GetDefault();
            gameMaster = new GameMaster.GameMaster(config);

            mockedNetworkComponent = new Mock <INetworkComponent>();
            mockedNetworkComponent.Setup(m => m.Connect(It.IsAny <ClientType>())).Returns(true);
            mockedNetworkComponent.Setup(m => m.GetIncomingMessages()).Returns(GetMockedMessages());
        }
        public void ParseWithPlayersMessageOptionsForGUI()
        {
            GameMaster.GameMaster gm  = new GameMaster.GameMaster();
            GameMasterBoard       gmb = new GameMasterBoard(2, 1, 2);

            gm.board = gmb;

            string expected = "o;w,2;g,1;t,2;";
            string result   = gm.MessageOptionsForGUI();

            Assert.AreEqual(expected, result);
        }
예제 #7
0
        public void TestReceiveRequest()
        {
            StubGuiMaintainer guiMantainer = new StubGuiMaintainer();
            GMConfiguration   config       = new GMConfiguration()
            {
                BoardX                     = 40,
                BoardY                     = 40,
                CsIP                       = "127.0.0.1",
                CsPort                     = 8081,
                MovePenalty                = 1500,
                DiscoveryPenalty           = 700,
                PutPenalty                 = 500,
                CheckForShamPenalty        = 700,
                InformationExchangePenalty = 1000,
                GoalAreaHeight             = 5,
                NumberOfGoals              = 5,
                NumberOfPieces             = 10,
                ShamPieceProbability       = 20
            };

            TcpListener serverSideListener = new TcpListener(IPAddress.Any, config.CsPort);

            serverSideListener.Start();
            TcpClient serverSide = null;
            var       task       = new Task(() => serverSide = serverSideListener.AcceptTcpClient());

            task.Start();


            GameMaster.GameMaster gm = new GameMaster.GameMaster(guiMantainer, config, new ProxyMessageHandler());
            gm.Start();
            guiMantainer.StartGame();
            var gmTask = new Task(() => gm.WaitForEnd());

            gmTask.Start();

            task.Wait();
            serverSideListener.Stop();
            IMessageSenderReceiver senderReceiver = new StreamMessageSenderReceiver(serverSide.GetStream(), new Parser());
            var message = new Message <DiscoveryRequest>()
            {
                AgentId        = 1,
                MessagePayload = new DiscoveryRequest()
            };

            senderReceiver.Send(message);
            senderReceiver.StartReceiving(m =>
            {
                Assert.AreEqual(m.MessageId, MessageType.DiscoveryResponse);
            });
        }
        public void ParseNoPlayersMessageStateForGUI()
        {
            GameMaster.GameMaster gm  = new GameMaster.GameMaster();
            GameMasterBoard       gmb = new GameMasterBoard(2, 1, 2);
            Position goal             = new Position(1, 0);
            Position piece            = new Position(1, 1);

            gmb.SetGoal(goal);
            gmb.GetCell(piece).SetCellState(CellState.Piece);
            gm.board = gmb;

            string expected = "s;0,4,0,2,0,0,0,0;";
            string result   = gm.MessageStateForGUI();

            Assert.AreEqual(CellState.Valid, gm.board.GetCell(goal).GetCellState());
            Assert.AreEqual(CellState.Piece, gm.board.GetCell(piece).GetCellState());
            Assert.AreEqual(expected, result);
        }
예제 #9
0
 public void Setup()
 {
     gameMaster          = new GameMaster.GameMaster(GameMasterConfiguration.GetDefault());
     BoardLogicComponent = gameMaster.BoardLogic;
     size = new Point(gameMaster.Configuration.BoardX, gameMaster.Configuration.BoardY);
 }
 public void Setup()
 {
     GameMaster.GameMaster gameMaster = new GameMaster.GameMaster();
 }
예제 #11
0
        public void ConnectingAgentsState_ShouldConnectAgent()
        {
            // Setup
            var config = GameMasterConfiguration.GetDefault();

            config.TeamSize = 3;
            var gameMaster = new GameMaster.GameMaster(config);

            agentsInTeam = gameMaster.Configuration.TeamSize;
            gmTaskState  = new IntegrationTestsHelper.GameMasterTaskState(gameMaster, 30);

            var csConfig = CommunicationServerConfiguration.GetDefault();
            var csTask   = new Task(IntegrationTestsHelper.RunCommunicationServer, csConfig);

            csTask.Start();
            Thread.Sleep(100);

            var gmTask = new Task(IntegrationTestsHelper.RunGameMaster, gmTaskState);

            gmTask.Start();
            gmTaskState.GameMaster.ConnectToCommunicationServer();

            var agentTaskStates = IntegrationTestsHelper.CreateAgents(agentsInTeam)
                                  .Select(agent => new IntegrationTestsHelper.AgentTaskState(agent, agentSleepMs)).ToList();

            var agentTasks = agentTaskStates
                             .Select(agentTaskState => new Task(IntegrationTestsHelper.RunAgent, agentTaskState)).ToList();

            foreach (var agentTask in agentTasks)
            {
                Thread.Sleep(100);
                agentTask.Start();
            }

            gmTask.Wait();

            List <GameMaster.Agent> lobby = gmTaskState.GameMaster.ConnectionLogic.FlushLobby();

            Assert.AreEqual(agentsInTeam * 2, lobby.Count);
            Assert.AreEqual(2, lobby.Where(agent => agent.IsTeamLeader).Count());
            Assert.AreEqual(agentsInTeam, lobby.Where(agent => agent.Team == TeamId.Blue).Count());
            Assert.AreEqual(agentsInTeam, lobby.Where(agent => agent.Team == TeamId.Red).Count());

            // Cleanup
            gmTaskState.GameMaster.OnDestroy();
            try
            {
                gmTaskState.GameMaster.OnDestroy();
                csTask.Wait(200);
            }
            catch (AggregateException ex)
            {
                Assert.AreEqual(TaskStatus.Faulted, csTask.Status);
                var exception = ex.InnerException as CommunicationErrorException;
                Assert.IsNotNull(exception);
                Assert.AreEqual(CommunicationExceptionType.GameMasterDisconnected, exception.Type);

                for (int i = 0; i < agentTasks.Count; i++)
                {
                    agentTasks[i].Wait(100);
                    agentTaskStates[i].Agent.OnDestroy();
                }
            }
        }
예제 #12
0
 public void Setup()
 {
     configuration   = GameMasterConfiguration.GetDefault();
     gameMaster      = new GameMaster.GameMaster(configuration);
     connectionLogic = gameMaster.ConnectionLogic;
 }
예제 #13
0
 public void Setup()
 {
     configuration      = GameMasterConfiguration.GetDefault();
     gameMaster         = new GameMaster.GameMaster(configuration);
     gameLogicComponent = gameMaster.GameLogic;
 }