Exemplo n.º 1
0
        public void Dispatch(Message message)
        {
            if (!ObserverGrainId.TryParse(message.TargetGrain, out var observerId))
            {
                this.logger.LogError(
                    (int)ErrorCode.ProxyClient_OGC_TargetNotFound_2,
                    "Message is not addresses to an observer. {Message}",
                    message);
                return;
            }

            if (this.localObjects.TryGetValue(observerId, out var objectData))
            {
                this.Invoke(objectData, message);
            }
            else
            {
                this.logger.Error(
                    ErrorCode.ProxyClient_OGC_TargetNotFound,
                    String.Format(
                        "Unexpected target grain in request: {0}. Message={1}",
                        message.TargetGrain,
                        message));
            }
        }
Exemplo n.º 2
0
 internal LocalObjectData(IAddressable obj, ObserverGrainId observerId, InvokableObjectManager manager)
 {
     this.LocalObject = new WeakReference(obj);
     this.ObserverId  = observerId;
     this.Messages    = new Queue <Message>();
     this.Running     = false;
     _manager         = manager;
 }
Exemplo n.º 3
0
 internal LocalObjectData(IAddressable obj, ObserverGrainId observerId, IGrainMethodInvoker invoker)
 {
     this.LocalObject = new WeakReference(obj);
     this.ObserverId  = observerId;
     this.Invoker     = invoker;
     this.Messages    = new Queue <Message>();
     this.Running     = false;
 }
Exemplo n.º 4
0
        public void DeleteObjectReference(IAddressable obj)
        {
            if (!(obj is GrainReference reference))
            {
                throw new ArgumentException("Argument reference is not a grain reference.");
            }

            if (!ObserverGrainId.TryParse(reference.GrainId, out var observerId))
            {
                throw new ArgumentException($"Reference {reference.GrainId} is not an observer reference");
            }

            if (!localObjects.TryDeregister(observerId))
            {
                throw new ArgumentException("Reference is not associated with a local object.", "reference");
            }
        }
Exemplo n.º 5
0
        public GrainReference CreateObjectReference(IAddressable obj, IGrainMethodInvoker invoker)
        {
            if (obj is GrainReference)
            {
                throw new ArgumentException("Argument obj is already a grain reference.", nameof(obj));
            }

            if (obj is Grain)
            {
                throw new ArgumentException("Argument must not be a grain class.", nameof(obj));
            }

            var            observerId = ObserverGrainId.Create(this.clientId);
            GrainReference reference  = GrainReference.NewObserverGrainReference(observerId, this.GrainReferenceRuntime);

            if (!localObjects.TryRegister(obj, observerId, invoker))
            {
                throw new ArgumentException($"Failed to add new observer {reference} to localObjects collection.", "reference");
            }
            return(reference);
        }
Exemplo n.º 6
0
        public void Dispatch(Message message)
        {
            if (!ObserverGrainId.TryParse(message.TargetGrain, out var observerId))
            {
                this.logger.LogError(
                    (int)ErrorCode.ProxyClient_OGC_TargetNotFound_2,
                    "Message is not addressed to an observer. {Message}",
                    message);
                return;
            }

            if (this.localObjects.TryGetValue(observerId, out var objectData))
            {
                objectData.ReceiveMessage(message);
            }
            else
            {
                this.logger.LogError(
                    (int)ErrorCode.ProxyClient_OGC_TargetNotFound,
                    "Unexpected target grain in request: {TargetGrain}. Message: {Message}",
                    message.TargetGrain,
                    message);
            }
        }
Exemplo n.º 7
0
        public void Dispatch(Message message)
        {
            if (!ObserverGrainId.TryParse(message.TargetGrain, out var observerId))
            {
                this.logger.Error(
                    ErrorCode.ProxyClient_OGC_TargetNotFound_2,
                    string.Format("Did not find TargetObserverId header in the message = {0}. A request message to a client is expected to have an observerId.", message));
                return;
            }

            if (this.localObjects.TryGetValue(observerId, out var objectData))
            {
                this.Invoke(objectData, message);
            }
            else
            {
                this.logger.Error(
                    ErrorCode.ProxyClient_OGC_TargetNotFound,
                    String.Format(
                        "Unexpected target grain in request: {0}. Message={1}",
                        message.TargetGrain,
                        message));
            }
        }
Exemplo n.º 8
0
 public bool TryDeregister(ObserverGrainId objectId)
 {
     return(this.localObjects.TryRemove(objectId, out _));
 }
Exemplo n.º 9
0
 public bool TryRegister(IAddressable obj, ObserverGrainId objectId)
 {
     return(this.localObjects.TryAdd(objectId, new LocalObjectData(obj, objectId, this)));
 }
Exemplo n.º 10
0
 public bool TryRegister(IAddressable obj, ObserverGrainId objectId, IGrainMethodInvoker invoker)
 {
     return(this.localObjects.TryAdd(objectId, new LocalObjectData(obj, objectId, invoker, this.rootGrainContext)));
 }
Exemplo n.º 11
0
        internal static IClientGatewayObserver GetObserver(IInternalGrainFactory grainFactory, ClientGrainId clientId)
        {
            var observerId = ObserverGrainId.Create(clientId, ScopedId);

            return(grainFactory.GetGrain <IClientGatewayObserver>(observerId.GrainId));
        }
Exemplo n.º 12
0
 internal override ObserverGrainId GetObserverGrainId(ClientGrainId clientId) => ObserverGrainId.Create(clientId, ScopedId);