public async Task <ActorProxy <TPrimaryNetContract> > GetActor <TPrimaryNetContract>(ActorKey actorKey) { NetContractDescription desc = Dispatcher.GetContract <TPrimaryNetContract>(); var proxyKey = new ActorProxyKey(actorKey, desc.TypeId); object proxy; if (_proxyCache.TryGetValue(proxyKey, out proxy)) { return((ActorProxy <TPrimaryNetContract>)proxy); } IOperationExecutor operationExecutor; if (actorKey.OwnerNodeId == Id) //local actor { Actor actor; Repository.TryGet(actorKey.LocalActorId, out actor); operationExecutor = actor; } else { operationExecutor = await GetNodePeer(actorKey.OwnerNodeId); } return((ActorProxy <TPrimaryNetContract>)_proxyCache.GetOrAdd(proxyKey, (actorId) => new ActorProxy <TPrimaryNetContract>( (TPrimaryNetContract)(object)Dispatcher.CreateProxy(Dispatcher.GetContractId(typeof(TPrimaryNetContract)), MessageFactory, operationExecutor, actorKey), actorKey))); }
public TNetContract GetProxy <TNetContract>(uint?localActorId = null) where TNetContract : class { NetContractDescription contractDesc = Dispatcher.GetContract <TNetContract>(); var proxyKey = new ActorProxyKey(new ActorKey(0, localActorId ?? 0), contractDesc.TypeId); NetProxy proxy; if (!_proxyCache.TryGetValue(proxyKey, out proxy)) { proxy = Dispatcher.CreateProxy(contractDesc.TypeId, MsgFactory, this, localActorId.HasValue ? proxyKey.ActorKey : (ActorKey?)null); _proxyCache.Add(proxyKey, proxy); } return((TNetContract)(object)proxy); }
public async Task <TNetContract> GetProxy <TNetContract>(uint?localActorId = null) { await Node.Fiber.ContinueOn().ConfigureAwait(false); NetContractDescription contractDesc = Node.Dispatcher.GetContract <TNetContract>(); var proxyKey = new ActorProxyKey(new ActorKey(0, localActorId ?? 0), contractDesc.TypeId); NetProxy proxy; if (!_proxyCache.TryGetValue(proxyKey, out proxy)) { proxy = Node.Dispatcher.CreateProxy(contractDesc.TypeId, MessageFactory, this, localActorId.HasValue ? proxyKey.ActorKey : (ActorKey?)null); _proxyCache.Add(proxyKey, proxy); } return((TNetContract)(object)proxy); }