/// <summary> /// Find the longest matching path which we know about and return that <see cref="IActorRef"/> /// (or ask that <see cref="IActorRef"/> to continue searching if elements are left). /// </summary> /// <param name="name">The name.</param> /// <returns>ActorRef.</returns> public override IActorRef GetChild(IReadOnlyList <string> name) { var path = name.Join("/"); var n = 0; while (true) { var(s, uid) = ActorCell.GetNameAndUid(path); if (TryGetChild(s, out var child)) { if (uid != ActorCell.UndefinedUid && uid != child.Path.Uid) { return(Nobody.Instance); } return(n == 0 ? child : child.GetChild(name.TakeRight(n).ToList())); } var last = path.LastIndexOf("/", StringComparison.Ordinal); if (last == -1) { return(Nobody.Instance); } path = path.Substring(0, last); n++; } }
public (string name, int uid) ActorCell_GetNameAndUid() { return(ActorCell.GetNameAndUid(ActorPath)); }