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 RoomFlags_DeleteNullPropsTest()
        {
            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 OperationRequest
                {
                    OperationCode = OperationCode.CreateGame,
                    Parameters    = new Dictionary <byte, object>
                    {
                        { ParameterCode.RoomName, roomName },
                        { ParameterCode.Properties, gameProperties },
                    }
                };

                createGameRequest.Parameters.Add((byte)ParameterKey.RoomOptionFlags, RoomOptionFlags.DeleteNullProps);


                masterClient1 = this.CreateMasterClientAndAuthenticate(Player1);
                var cgResponse = masterClient1.SendRequestAndWaitForResponse(createGameRequest);

                this.ConnectAndAuthenticate(masterClient1, (string)cgResponse[ParameterCode.Address]);

                masterClient1.SendRequestAndWaitForResponse(createGameRequest);

                masterClient1.OpSetPropertiesOfRoom
                (
                    new Hashtable
                {
                    { "P1", null }
                }
                );

                masterClient2 = this.CreateMasterClientAndAuthenticate(Player2);

                var joinRequest = new JoinGameRequest()
                {
                    GameId = roomName,
                };

                var 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);
            }
        }