Example #1
0
        public static async Task <PID> GetAsync(string name, string kind, CancellationToken ct)
        {
            var req = new PidCacheRequest(name, kind);
            var res = await PidCache.Pid.RequestAsync <ActorPidResponse>(req, ct);

            return(res.Pid);
        }
Example #2
0
        public static async Task <(PID, ResponseStatusCode)> GetAsync(string name, string kind, CancellationToken ct)
        {
            var req  = new PidCacheRequest(name, kind);
            var resp = await PidCache.Pid.RequestAsync <PidCacheResponse>(req, ct);

            return(resp.Pid, resp.StatusCode);
        }
Example #3
0
        private void GetPid(IContext context, PidCacheRequest msg)
        {
            if (_cache.TryGetValue(msg.Name, out var pid))
            {
                context.Respond(new ActorPidResponse
                {
                    Pid = pid
                });
                return; //found the pid, replied, exit
            }

            var name = msg.Name;
            var kind = msg.Kind;

            context.ReenterAfter(MemberList.GetMemberAsync(name, kind), address =>
            {
                var remotePid = Partition.PartitionForKind(address.Result, kind);
                var req       = new ActorPidRequest
                {
                    Kind = kind,
                    Name = name
                };
                var resp = remotePid.RequestAsync <ActorPidResponse>(req);
                context.ReenterAfter(resp, t =>
                {
                    var res            = t.Result;
                    var respid         = res.Pid;
                    var key            = respid.ToShortString();
                    _cache[name]       = respid;
                    _reverseCache[key] = name;
                    context.Watch(respid);
                    context.Respond(res);
                    return(Actor.Done);
                });
                return(Actor.Done);
            });
        }