public override ActorRef GetChild(IEnumerable <string> name) { var current = (ActorRef)this; var index = 0; foreach (var element in name) { switch (element) { case "..": return(Parent.GetChild(name.Skip(index))); case "": break; default: var nameAndUid = ActorCell.SplitNameAndUid(element); var internalActorRef = Lookup.GetChildByName(nameAndUid.Name); if (internalActorRef.IsNobody()) { return(Nobody); } return(internalActorRef.GetChild(name.Skip(index))); //TODO: Implement this in order to be able to handle restarting children // lookup.getChildByName(childName) match { // case Some(crs: ChildRestartStats) if uid == ActorCell.undefinedUid || uid == crs.uid ⇒ // crs.child.asInstanceOf[InternalActorRef].getChild(name) // case _ ⇒ Nobody // } } index++; } return(current); }
public override ActorRef GetChild(IEnumerable <string> name) { var current = (ActorRef)this; var index = 0; foreach (var element in name) { switch (element) { case "..": return(Parent.GetChild(name.Skip(index))); case "": break; default: var nameAndUid = ActorCell.SplitNameAndUid(element); ChildStats 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)) { crs.Child.GetChild(name.Skip(index)); } } return(Nobody); } index++; } return(current); }
/// <summary> /// TBD /// </summary> /// <param name="name">TBD</param> /// <returns>TBD</returns> 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); if (Lookup.TryGetChildStatsByName(nameAndUid.Name, out var 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); } } } else if (Lookup is ActorCell cell && cell.TryGetFunctionRef(nameAndUid.Name, nameAndUid.Uid, out var functionRef)) { return(functionRef); } return(ActorRefs.Nobody); } }
/// <summary> /// Creates a new <see cref="ChildActorPath"/> with the specified parent <paramref name="path"/> /// and the specified <paramref name="name"/>. /// </summary> /// <param name="path">The parent path of the newly created actor path</param> /// <param name="name">The name of child actor path</param> /// <returns>A newly created <see cref="ChildActorPath"/></returns> public static ActorPath operator /(ActorPath path, string name) { var nameAndUid = ActorCell.SplitNameAndUid(name); return(new ChildActorPath(path, nameAndUid.Name, nameAndUid.Uid)); }