예제 #1
0
        /// <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++;
            }
        }
예제 #2
0
 public (string name, int uid) ActorCell_GetNameAndUid()
 {
     return(ActorCell.GetNameAndUid(ActorPath));
 }