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