protected bool DefaultReceive(object message)
{
if (message is Subscribe)
{
var subscribe = (Subscribe)message;
Context.Watch(subscribe.Ref);
Subscribers.Add(subscribe.Ref);
PruneDeadline = null;
Context.Parent.Tell(new Subscribed(new SubscribeAck(subscribe), Sender));
}
else if (message is Unsubscribe)
{
var unsubscribe = (Unsubscribe)message;
Context.Unwatch(unsubscribe.Ref);
Remove(unsubscribe.Ref);
Context.Parent.Tell(new Unsubscribed(new UnsubscribeAck(unsubscribe), Sender));
}
else if (message is Terminated)
{
var terminated = (Terminated)message;
Remove(terminated.ActorRef);
}
else if (message is Prune)
{
if (PruneDeadline != null && PruneDeadline.IsOverdue) Context.Stop(Self);
}
else
{
foreach (var subscriber in Subscribers)
subscriber.Forward(message);
}
return true;
}