public void EventCache_ActorReplaceData()
        {
            UnifiedTestClient client1 = null;
            UnifiedTestClient client2 = null;
            UnifiedTestClient client3 = null;
            UnifiedTestClient client4 = null;

            try
            {
                var roomName = this.GenerateRandomizedRoomName(MethodBase.GetCurrentMethod().Name);

                // create room
                client1 = this.CreateMasterClientAndAuthenticate(this.Player1);

                var createGameRequest = new CreateGameRequest
                {
                    GameId          = roomName,
                    CheckUserOnJoin = !string.IsNullOrEmpty(this.Player1),
                };

                var createGameResponse = client1.CreateGame(createGameRequest);

                this.ConnectAndAuthenticate(client1, createGameResponse.Address);

                // creation on GS
                client1.CreateGame(createGameRequest);


                // second player joins and check that there is no removed event
                client2 = this.CreateMasterClientAndAuthenticate(this.Player2);
                client3 = this.CreateMasterClientAndAuthenticate(this.Player3);

                this.ConnectClientToGame(client2, roomName);
                this.ConnectClientToGame(client3, roomName);

                var eventsData = new Hashtable {
                    { 1, 1 }
                };
                var eventsData2 = new Hashtable
                {
                    { 2, 2 }
                };
                AddActorEventCacheData(client1, client2, client3, eventsData);

                client2.Disconnect();
                client3.Disconnect();

                // update cached message
                client1.SendRequest(new OperationRequest
                {
                    OperationCode = OperationCode.RaiseEvent,
                    Parameters    = new Dictionary <byte, object>
                    {
                        { ParameterCode.Data, eventsData2 },
                        { ParameterCode.Cache, (byte)EventCaching.ReplaceCache },
                        { ParameterCode.Code, (byte)1 },
                    }
                });


                client4 = this.CreateMasterClientAndAuthenticate("Player4");
                this.ConnectClientToGame(client4, roomName);

                client4.WaitForEvent(EventCode.Join);

                EventData ev;
                Assert.That(client4.TryWaitEvent(1, this.WaitTimeout, out ev), Is.True);

                Assert.That(ev[(byte)ParameterKey.Data], Is.EqualTo(eventsData2));
                client4.CheckThereIsEvent(2);
                client4.CheckThereIsEvent(3);
            }
            finally
            {
                DisposeClients(client1, client2, client3, client4);
            }
        }