private bool Establishing(object message)
{
return message.Match()
.With<ClusterReceptionist.Contacts>(msg =>
{
if (msg.ContactPoints.Length != 0)
{
_contacts = msg.ContactPoints.Select(Context.ActorSelection).ToArray();
foreach (var contact in _contacts)
{
contact.Tell(new Identify(null));
}
}
})
.With<ActorIdentity>(msg =>
{
if (msg.Subject != null)
{
Log.Info("Connected to [{0}]", msg.Subject.Path);
ScheduleRefreshContactsTick(Settings.RefreshContactsInterval);
var receptionist = msg.Subject;
SendBuffered(receptionist);
Context.Become(Active(receptionist));
_failureDetector.HeartBeat();
}
})
.With<InternalMessage>(msg =>
{
switch (msg)
{
case InternalMessage.HeartbeatTick:
_failureDetector.HeartBeat();
break;
case InternalMessage.RefreshContactsTick:
SendGetContacts();
break;
}
})
.With<Send>(send => Buffer(new PublishSubscribe.Send(send.Path, send.Message, send.LocalAffinity)))
.With<SendToAll>(send => Buffer(new PublishSubscribe.SendToAll(send.Path, send.Message)))
.With<Publish>(publish => Buffer(new PublishSubscribe.Publish(publish.Topic, publish.Message)))
.WasHandled;
}