public ITask StartCoroutine(IEnumerator <IYieldInstruction> task) { if (task == null) { throw new ArgumentNullException("task"); } ITask result; // IEnumerators start 'before the first location', so calling this once here gets the task ready to execute if (task.MoveNext()) { SchedulerTask schedulerTask = new SchedulerTask(this, task); result = schedulerTask; if (task.Current is IFixedYieldInstruction) { mPendingFixedUpdateTasks.Add(schedulerTask); } else { mPendingTasks.Add(schedulerTask); } } else { // This coroutine never yielded, so it's execution is complete result = new EmptyTask(); } return(result); }
public override BaseFlowNode Build() { var result = new EmptyTask(); FeedActivityNode(result); return(result); }
public override object Clone() { var result = new EmptyTask(); FeedActivity(result); return(result); }
public async Task LotsOfClientsGoToGameServer() { for (var i = 0; i < 3; i++) { await TestBody(i + 1, CLIENT_CONNECTS_TO_IP, SERVER_PORT_MM, new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 1 } }, new Dictionary <byte, object>()); EmptyTask.Wait(3000); } }
public void ClientConnectTest() { _client.Connect(CLIENT_CONNECTS_TO_IP, SERVER_PORT); EmptyTask.Wait(WAIT_TIMEOUT); Assert.AreEqual(1, _gameApplication.GetStats().PeerCount); _client.Disconnect(); EmptyTask.Wait(WAIT_TIMEOUT); Assert.AreEqual(0, _gameApplication.GetStats().PeerCount); _client.Connect(CLIENT_CONNECTS_TO_IP, SERVER_PORT); EmptyTask.Wait(WAIT_TIMEOUT); Assert.AreEqual(1, _gameApplication.GetStats().PeerCount); _client.Disconnect(); EmptyTask.Wait(WAIT_TIMEOUT); }
public async Task SecondJoinToSameRoom() { RegisterServer(); //clients connect _client1.Connect(CLIENT_CONNECTS_TO_IP, MM_SERVER_PORT); _client2.Connect(CLIENT_CONNECTS_TO_IP, MM_SERVER_PORT); _client3.Connect(CLIENT_CONNECTS_TO_IP, MM_SERVER_PORT); EmptyTask.Wait(WAIT_TIMEOUT); EmptyTask.Wait(WAIT_TIMEOUT); //first creates room await _client1.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 3 } })); //wait for adding bots and creating room EmptyTask.Wait(100); //second should go to the same room await _client2.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 3 } })); await _client1.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady); await _client2.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady); //check room number var stats = _mmApplication.GetStats(); Assert.AreEqual(1, stats.CreatedRoomsCount); //third join after room closed await _client3.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 3 } })); await _client3.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady, 11000); stats = _mmApplication.GetStats(); Assert.AreEqual(2, stats.CreatedRoomsCount); }
public void PassProperties() { var roomId = _gameApplication.CreateRoom( new Dictionary <byte, object>() { { PropertyCode.RoomProperties.GameMode, (byte)GameMode.SinglePlayer } }, new Dictionary <Guid, Dictionary <byte, object> >()); _client.Connect(CLIENT_CONNECTS_TO_IP, SERVER_PORT); EmptyTask.Wait(WAIT_TIMEOUT); //authing EmptyTask.Wait(WAIT_TIMEOUT); //send join var props = new Dictionary <byte, object> { { 1, 100 }, { 2, (byte)101 }, { 3, (short)102 }, { 4, (ushort)103 }, { 5, (uint)104 }, { 6, (float)105.15 }, { 7, true }, { 8, (long)106 }, { 9, (ulong)110 }, { 10, new byte[] { 111, 112, 113 } } }; _client.Send <JoinRoomResponse>(new JoinRoomRequest(roomId, props)); EmptyTask.Wait(WAIT_TIMEOUT); var peer = _gameApplication.GetListeners()[0].GetPeerCollection().GetAll().FirstOrDefault().Value; var room = _gameApplication.GetRoomManager().GetRoomBySessionId(peer.GetSessionId()); var roomPlayer = room.FindPlayer(peer.GetSessionId()); Assert.AreEqual(props, roomPlayer.Properties); }
public async Task JoinMaxPlusOne() { RegisterServer(); //clients connect _client1.Connect(CLIENT_CONNECTS_TO_IP, MM_SERVER_PORT); _client2.Connect(CLIENT_CONNECTS_TO_IP, MM_SERVER_PORT); _client3.Connect(CLIENT_CONNECTS_TO_IP, MM_SERVER_PORT); EmptyTask.Wait(WAIT_TIMEOUT); await _client1.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 3 } })); await _client2.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 3 } })); await _client3.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 3 } })); //wait for creating room EmptyTask.Wait(1000); await _client1.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady); await _client2.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady); await _client3.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady); //check room number var stats = _mmApplication.GetStats(); Assert.AreEqual(2, stats.CreatedRoomsCount); }
public void IntegrationTest() { var isSuccess = false; //create 12 clients and connect them to mm for (var i = 0; i < CLIENTS_NUMBER_1; i++) { var client = new TestClientPeer(_clientLogger, taskSchedulerFactory, serializer); client.Connect(CLIENT_CONNECTS_TO_IP, SERVER_PORT_MM); _clients.Add(client); EmptyTask.Wait(WAIT_TIMEOUT); } //send auth _clients.ForEach(c => c.Send <AuthorizationResponse>(new AuthorizationRequest()).Wait()); //send join matchmaking (with level = 1) _clients.ForEach(c => c.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(new Dictionary <byte, object> { { FakePropertyCodes.PlayerProperties.Level, 1 } })).Wait()); _clients.ForEach(c => c.WaitFor <JoinInfoEvent>(e => e.JoinInfo != null && e.JoinInfo.Status == JoinStatus.RoomIsReady)); var mmStats = _mmApplication.GetStats(); Assert.AreEqual(1, mmStats.RegisteredServers.Count); //sending leave mathmaking request _clients.ForEach(c => c.Send <LeaveMatchMakingResponse>(new LeaveMatchMakingRequest()).Wait()); _clients.ForEach(c => c.Disconnect()); mmStats = _mmApplication.GetStats(); Assert.AreEqual(0, mmStats.TotalPlayers); Assert.AreEqual(1, mmStats.RegisteredServers.Count); //connect to server _clients.ForEach(c => c.Connect(c.GetJoinInfo().ServerIpAddress.ToString(), c.GetJoinInfo().ServerPort)); var roomId = _clients.First().GetJoinInfo().RoomId; EmptyTask.Wait(MM_TICK * 2); var stats = _gameApplication.GetStats(); Assert.AreEqual(CLIENTS_NUMBER_1, stats.PeerCount); Assert.AreEqual(1, stats.RoomCount); var roomsPeerCount = stats.RoomsPeerCount.First(); //players did not join room yet Assert.AreEqual(roomId, roomsPeerCount.Key); Assert.AreEqual(0, roomsPeerCount.Value); //authing _clients.ForEach(c => { var sessionId = Guid.NewGuid(); c.SessionId = sessionId; c.Send <AuthorizationResponse>(new AuthorizationRequest() { SessionId = sessionId }); }); EmptyTask.Wait(WAIT_TIMEOUT); //joining room _clients.ForEach(c => c.Send <JoinRoomResponse>(new JoinRoomRequest(roomId, new Dictionary <byte, object>()))); EmptyTask.Wait(WAIT_TIMEOUT); stats = _gameApplication.GetStats(); roomsPeerCount = stats.RoomsPeerCount.First(); //players joined room Assert.AreEqual(roomId, roomsPeerCount.Key); Assert.AreEqual(CLIENTS_NUMBER_1, roomsPeerCount.Value); //activity //each client sends 1000 events to others _clients.ForEach(c => { for (int i = 0; i < EVENTS_SENT; i++) { c.SendEvent(new TestRoomEvent(true, 122, 4.668f, new List <int>())); } }); EmptyTask.Wait(WAIT_TIMEOUT * 100); isSuccess = true; _clients.ForEach(c => { if (c.CountOf <TestRoomEvent>() != (CLIENTS_NUMBER_1 - 1) * EVENTS_SENT) { _clientLogger.Error($"test events {c.CountOf<TestRoomEvent>()}/{(CLIENTS_NUMBER_1 - 1) * EVENTS_SENT}"); isSuccess = false; } }); Assert.IsTrue(isSuccess); //disconnect from server _clients.ForEach(c => c.Disconnect()); EmptyTask.Wait(WAIT_TIMEOUT); stats = _gameApplication.GetStats(); Assert.AreEqual(0, stats.PeerCount); }
private async Task TestBody(int launchIndex, string ip, ushort port, Dictionary <byte, object> mmProperties, Dictionary <byte, object> joinGameProperties) { var isSuccess = false; _clients.Clear(); //create N clients and connect them to mm for (var i = 0; i < CLIENTS_NUMBER_2; i++) { var client = new TestClientPeer(_clientLogger, taskSchedulerFactory, serializer); await client.Connect(ip, port); _clients.Add(client); EmptyTask.Wait(WAIT_TIMEOUT); } //send auth foreach (var client in _clients) { await client.Send <AuthorizationResponse>(new AuthorizationRequest()); } //send join matchmaking (with level = 1) foreach (var c in _clients) { await c.Send <EnterMatchMakingResponse>(new EnterMatchMakingRequest(mmProperties)); } EmptyTask.Wait(6000); //check joininfo existance isSuccess = true; int notJoinedCount = 0; int joinedCount = 0; foreach (var c in _clients) { if (c.GetJoinInfo() == null || c.GetJoinInfo().Status != JoinStatus.RoomIsReady) { if (c.GetJoinInfo() != null) { _clientLogger.Info($"Checking joinInfo. Status = {c.GetJoinInfo().Status}"); } notJoinedCount++; isSuccess = false; } else { if (c.GetJoinInfo() != null) { _clientLogger.Info($"Checking joinInfo. Status = {c.GetJoinInfo().Status}"); } joinedCount++; } } Assert.AreEqual(0, notJoinedCount); var roomsCount = CLIENTS_NUMBER_2 / TOTAL_PLAYERS_NEEDED_1 + (CLIENTS_NUMBER_2 % TOTAL_PLAYERS_NEEDED_1 > 0 ? 1: 0); Assert.AreEqual(CLIENTS_NUMBER_2 - joinedCount, notJoinedCount); var mmStats = _mmApplication.GetStats(); Assert.AreEqual(1, mmStats.RegisteredServers.Count); //sending leave mathmaking request foreach (var c in _clients) { await c.Send <LeaveMatchMakingResponse>(new LeaveMatchMakingRequest()); } foreach (var c in _clients) { c.Disconnect(); } mmStats = _mmApplication.GetStats(); Assert.AreEqual(0, mmStats.TotalPlayers); Assert.AreEqual(1, mmStats.RegisteredServers.Count); //connect to server foreach (var c in _clients.Where(c => c.GetJoinInfo() != null && c.GetJoinInfo().Status == JoinStatus.RoomIsReady)) { await c.Connect(c.GetJoinInfo().ServerIpAddress, c.GetJoinInfo().ServerPort); } var stats = _gameApplication.GetStats(); Assert.AreEqual(joinedCount, stats.PeerCount); Assert.AreEqual(roomsCount * launchIndex, stats.RoomCount); //authing foreach (var c in _clients) { var sessionId = Guid.NewGuid(); c.SessionId = sessionId; await c.Send <AuthorizationResponse>(new AuthorizationRequest { SessionId = sessionId }); } EmptyTask.Wait(WAIT_TIMEOUT); //joining room foreach (var c in _clients.Where(c => c.GetJoinInfo() != null)) { await c.Send <JoinRoomResponse>(new JoinRoomRequest(c.GetJoinInfo().RoomId, joinGameProperties)); } EmptyTask.Wait(WAIT_TIMEOUT * 2); stats = _gameApplication.GetStats(); Assert.AreEqual(roomsCount * launchIndex, stats.RoomCount); Assert.AreEqual(stats.RoomsPeerCount.Count, stats.RoomCount); //disconnect from server foreach (var c in _clients) { c.Disconnect(); } EmptyTask.Wait(WAIT_TIMEOUT); stats = _gameApplication.GetStats(); Assert.AreEqual(0, stats.PeerCount); }