SplitNameAndUid() public static method

public static SplitNameAndUid ( string name ) : NameAndUid
name string
return NameAndUid
Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        /// <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));
        }