Akka.Cluster.Tools.Tests.MultiNode.PublishSubscribe.DistributedPubSubMediatorSpec.DistributedPubSubMediator_should_keep_track_of_added_users C# (CSharp) Method

DistributedPubSubMediator_should_keep_track_of_added_users() public method

        public void DistributedPubSubMediator_should_keep_track_of_added_users()
        {
            DistributedPubSubMediator_should_startup_2_nodes_cluster();

            Within(TimeSpan.FromSeconds(15), () =>
            {
                RunOn(() =>
                {
                    var u1 = CreateChatUser("u1");
                    Mediator.Tell(new Put(u1));
                    var u2 = CreateChatUser("u2");
                    Mediator.Tell(new Put(u2));

                    AwaitCount(2);

                    // send to actor at the same node
                    u1.Tell(new Whisper("/user/u2", "hello"));
                    ExpectMsg("hello");
                    Assert.Equal(u2, LastSender);
                }, _first);

                RunOn(() =>
                {
                    var u3 = CreateChatUser("u3");
                    Mediator.Tell(new Put(u3));
                }, _second);

                RunOn(() =>
                {
                    AwaitCount(3);
                }, _first, _second);
                EnterBarrier("3-registered");

                RunOn(() =>
                {
                    var u4 = CreateChatUser("u4");
                    Mediator.Tell(new Put(u4));
                }, _second);

                RunOn(() =>
                {
                    AwaitCount(4);
                }, _first, _second);
                EnterBarrier("4-registered");

                RunOn(() =>
                {
                    // send to an actor on another node
                    ChatUser("u1").Tell(new Whisper("/user/u4", "hi there"));
                }, _first);

                RunOn(() =>
                {
                    ExpectMsg("hi there");
                    Assert.Equal("u4", LastSender.Path.Name);
                }, _second);
                EnterBarrier("after-2");
            });
        }