public override IActorRef GetChild(IEnumerable<string> name)
{
var current = (IActorRef)this;
if (!name.Any()) return current;
var next = name.FirstOrDefault() ?? "";
switch (next)
{
case "..":
return Parent.GetChild(name.Skip(1));
case "":
return ActorRefs.Nobody;
default:
var nameAndUid = ActorCell.SplitNameAndUid(next);
IChildStats stats;
if (Lookup.TryGetChildStatsByName(nameAndUid.Name, out stats))
{
var crs = stats as ChildRestartStats;
var uid = nameAndUid.Uid;
if (crs != null && (uid == ActorCell.UndefinedUid || uid == crs.Uid))
{
if (name.Skip(1).Any())
return crs.Child.GetChild(name.Skip(1));
else
return crs.Child;
}
}
return ActorRefs.Nobody;
}
}