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; }
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); }
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); }
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); }
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); }
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(); }
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(); } } }
public void Setup() { configuration = GameMasterConfiguration.GetDefault(); gameMaster = new GameMaster.GameMaster(configuration); connectionLogic = gameMaster.ConnectionLogic; }
public void Setup() { configuration = GameMasterConfiguration.GetDefault(); gameMaster = new GameMaster.GameMaster(configuration); gameLogicComponent = gameMaster.GameLogic; }