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)); } }
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; }
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; }
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"); } }
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); }
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); } }
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)); } }
public bool TryDeregister(ObserverGrainId objectId) { return(this.localObjects.TryRemove(objectId, out _)); }
public bool TryRegister(IAddressable obj, ObserverGrainId objectId) { return(this.localObjects.TryAdd(objectId, new LocalObjectData(obj, objectId, this))); }
public bool TryRegister(IAddressable obj, ObserverGrainId objectId, IGrainMethodInvoker invoker) { return(this.localObjects.TryAdd(objectId, new LocalObjectData(obj, objectId, invoker, this.rootGrainContext))); }
internal static IClientGatewayObserver GetObserver(IInternalGrainFactory grainFactory, ClientGrainId clientId) { var observerId = ObserverGrainId.Create(clientId, ScopedId); return(grainFactory.GetGrain <IClientGatewayObserver>(observerId.GrainId)); }
internal override ObserverGrainId GetObserverGrainId(ClientGrainId clientId) => ObserverGrainId.Create(clientId, ScopedId);