private void HandleDaemonMsgCreate(DaemonMsgCreate message)
{
var supervisor = (IInternalActorRef) message.Supervisor;
var parent = supervisor;
Props props = message.Props;
ActorPath childPath;
if(ActorPath.TryParse(message.Path, out childPath))
{
IEnumerable<string> subPath = childPath.Elements.Drop(1); //drop the /remote
ActorPath path = Path/subPath;
var localProps = props; //.WithDeploy(new Deploy(Scope.Local));
bool isTerminating = !_terminating.WhileOff(() =>
{
IInternalActorRef actor = _system.Provider.ActorOf(_system, localProps, supervisor, path, false,
message.Deploy, true, false);
string childName = subPath.Join("/");
AddChild(childName, actor);
actor.SendSystemMessage(new Watch(actor, this));
actor.Start();
if (AddChildParentNeedsWatch(parent, actor))
{
//TODO: figure out why current transport is not set when this message is sent
parent.SendSystemMessage(new Watch(parent, this));
}
});
if (isTerminating)
{
Log.Error("Skipping [{0}] to RemoteSystemDaemon on [{1}] while terminating", message, path.Address);
}
}
else
{
Log.Debug("remote path does not match path from message [{0}]", message);
}
}