protected override void FixtureSetup() { base.FixtureSetup(); UnifiedTestClient client = null; try { // this call will update Master server address client = (UnifiedTestClient)this.CreateTestClient(); client.UserId = this.Player1; if (this.authPolicy != AuthPolicy.AuthOnMaster || this.connectPolicy.UseNSToGetMS) { var response = this.ConnectAndAuthenticate(client, this.NameServerAddress, null, ErrorCode.Ok); this.MasterAddress = (string)response[ParameterCode.Address]; } this.ConnectAndAuthenticate(client, this.MasterAddress, client.UserId, null, reuseToken: true); var roomName = this.GenerateRandomString("room"); var createGameResponse = client.CreateGame(roomName); this.GameServerAddress = createGameResponse.Address; this.ConnectAndAuthenticate(client, this.GameServerAddress); client.CreateGame(roomName); client.LeaveGame(); } finally { DisposeClients(client); } }
public void RoomFlags_DeleteNullPropsAfterStateRestoreTest() { if (!this.UsePlugins) { Assert.Ignore("This test needs plugins"); } UnifiedTestClient masterClient1 = null; UnifiedTestClient masterClient2 = null; try { // create game on the game server string roomName = this.GenerateRandomizedRoomName(MethodBase.GetCurrentMethod().Name); var gameProperties = new Hashtable(); gameProperties["P1"] = 1; gameProperties["P2"] = 2; gameProperties["L1"] = 1; gameProperties["L2"] = 2; gameProperties["L3"] = 3; var createGameRequest = new CreateGameRequest { GameId = roomName, RoomFlags = RoomOptionFlags.DeleteNullProps, GameProperties = gameProperties, Plugins = new[] { "SaveLoadStateTestPlugin" }, }; masterClient1 = this.CreateMasterClientAndAuthenticate(Player1); var cgResponse = masterClient1.CreateGame(createGameRequest); this.ConnectAndAuthenticate(masterClient1, cgResponse.Address); masterClient1.CreateGame(createGameRequest); Thread.Sleep(100); masterClient1.LeaveGame();// leave game, so that game will be persisted Thread.Sleep(100); this.ConnectAndAuthenticate(masterClient1, this.MasterAddress); var joinRequest = new JoinGameRequest() { GameId = roomName, JoinMode = JoinModes.RejoinOrJoin, Plugins = new[] { "SaveLoadStateTestPlugin" }, }; var jgResponse = masterClient1.JoinGame(joinRequest, ErrorCode.Ok); this.ConnectAndAuthenticate(masterClient1, jgResponse.Address); jgResponse = masterClient1.JoinGame(joinRequest); masterClient1.OpSetPropertiesOfRoom ( new Hashtable { { "P1", null } } ); masterClient2 = this.CreateMasterClientAndAuthenticate(Player2); jgResponse = masterClient2.JoinGame(joinRequest, ErrorCode.Ok); this.ConnectAndAuthenticate(masterClient2, jgResponse.Address); jgResponse = masterClient2.JoinGame(joinRequest); Assert.That(jgResponse.GameProperties.Contains("P1"), Is.False); masterClient1.OpSetPropertiesOfRoom ( new Hashtable { { "P2", null } } ); var propertiesChangedEvent = masterClient2.WaitForEvent(EventCode.PropertiesChanged, this.WaitTimeout); var properties = (Hashtable)propertiesChangedEvent[(byte)ParameterKey.Properties]; Assert.That(properties, Is.Not.Null); Assert.That(properties.Contains("P2")); Assert.That(properties["P2"], Is.Null); } finally { DisposeClients(masterClient1, masterClient2); } }
public void EventCache_ActorCacheLimitExceeded() { if (this.IsOnline) { Assert.Ignore("Does not support online mode"); } UnifiedTestClient client1 = null; UnifiedTestClient client2 = null; UnifiedTestClient client3 = null; try { var roomName = this.GenerateRandomizedRoomName(MethodBase.GetCurrentMethod().Name); client1 = this.CreateMasterClientAndAuthenticate(Player1); client3 = this.CreateMasterClientAndAuthenticate(Player3); var createGameResponse = client1.CreateGame(roomName, true, true, 4); // switch client 1 to GS this.ConnectAndAuthenticate(client1, createGameResponse.Address); this.ConnectAndAuthenticate(client3, createGameResponse.Address); client1.CreateGame(new CreateGameRequest() { GameId = roomName, PlayerTTL = -1, SuppressRoomEvents = true, CheckUserOnJoin = true }); client3.JoinGame(roomName); // exceeding limits for (byte i = 1; i <= 11; ++i) { var raiseEventOp = new OperationRequest { OperationCode = OperationCode.RaiseEvent, Parameters = new Dictionary <byte, object> { { ParameterCode.Data, new Hashtable() }, { ParameterCode.Cache, (byte)CacheOperation.MergeCache }, { ParameterCode.Code, i } } }; client1.SendRequest(raiseEventOp); } client1.WaitForEvent(EventCode.PropertiesChanged); client1.WaitForEvent(EventCode.ErrorInfo); client2 = this.CreateMasterClientAndAuthenticate(Player2); client2.JoinGame(roomName, ErrorCode.GameClosed); this.ConnectAndAuthenticate(client2, createGameResponse.Address); client2.JoinGame(roomName, ErrorCode.GameClosed); client3.LeaveGame(true); client3.Disconnect(); this.ConnectAndAuthenticate(client3, createGameResponse.Address); client3.JoinGame(new JoinGameRequest { GameId = roomName, JoinMode = JoinModes.RejoinOnly }, 32739);//EventCacheExceeded } finally { DisposeClients(client1, client2, client3); } }