public void SystemInvoke(Envelope envelope)
{
try
{
var m = envelope.Message;
if (m is ActorTaskSchedulerMessage) HandleActorTaskSchedulerMessage(m as ActorTaskSchedulerMessage);
else if (m is Failed) HandleFailed(m as Failed);
else if (m is DeathWatchNotification)
{
var msg = m as DeathWatchNotification;
WatchedActorTerminated(msg.Actor, msg.ExistenceConfirmed, msg.AddressTerminated);
}
else if (m is Create) HandleCreate((m as Create).Failure);
else if (m is Watch)
{
var watch = m as Watch;
AddWatcher(watch.Watchee, watch.Watcher);
}
else if (m is Unwatch)
{
var unwatch = m as Unwatch;
RemWatcher(unwatch.Watchee, unwatch.Watcher);
}
else if (m is Recreate) FaultRecreate((m as Recreate).Cause);
else if (m is Suspend) FaultSuspend();
else if (m is Resume) FaultResume((m as Resume).CausedByFailure);
else if (m is Terminate) Terminate();
else if (m is Supervise)
{
var supervise = m as Supervise;
Supervise(supervise.Child, supervise.Async);
}
else
{
throw new NotSupportedException("Unknown message " + m.GetType().Name);
}
}
catch (Exception cause)
{
HandleInvokeFailure(cause);
}
}