/// <summary> /// Registers an Actor as a subscriber for messages. /// </summary> /// <param name="actor">Reference to the actor to register.</param> public async Task RegisterSubscriberAsync(ActorReference actor) { if (actor == null) { throw new ArgumentNullException(nameof(actor)); } ActorEventSourceMessage($"Registering Subscriber '{actor.ServiceUri}' for messages of type '{_messageType}'"); var actorReference = new ActorReferenceWrapper(actor); var state = await StateManager.GetStateAsync <BrokerActorState>(StateKey); if (!state.SubscriberMessages.ContainsKey(actorReference)) { state.SubscriberMessages.Add(actorReference, new Queue <MessageWrapper>()); } }
public void WhenDeterminingShouldDeliverMessageToActorWithUnmatchingPayload_ThenReturnsFalse() { var actorRef = new ActorReferenceWrapper(new ActorReference { ActorId = ActorId.CreateRandom() }, "Customer.Name=Customer1"); var messageWrapper = new { Customer = new { Name = "Customer2" } }.CreateMessageWrapper(); bool shouldDeliver = actorRef.ShouldDeliverMessage(messageWrapper); Assert.IsFalse(shouldDeliver); }
public void WhenDeterminingShouldDeliverMessageToActorWithMatchingPayloadWithRegexReservedChar_ThenReturnsTrue() { var actorRef = new ActorReferenceWrapper(new ActorReference { ActorId = ActorId.CreateRandom() }, "Customer.Name=^Customer"); var messageWrapper = new { Customer = new { Name = "Customer1" } }.CreateMessageWrapper(); bool shouldDeliver = actorRef.ShouldDeliverMessage(messageWrapper); Assert.IsTrue(shouldDeliver); }
/// <summary> /// Unregisters an Actor as a subscriber for messages. /// </summary> /// <param name="actor">Reference to the actor to unsubscribe.</param> /// <param name="flushQueue">Publish any remaining messages.</param> public async Task UnregisterSubscriberAsync(ActorReference actor, bool flushQueue) { if (actor == null) { throw new ArgumentNullException(nameof(actor)); } ActorEventSourceMessage($"Unregistering Subscriber '{actor.ServiceUri}' for messages of type '{_messageType}'"); var actorReference = new ActorReferenceWrapper(actor); Queue <MessageWrapper> queue; var state = await StateManager.GetStateAsync <BrokerActorState>(StateKey); if (flushQueue && state.SubscriberMessages.TryGetValue(actorReference, out queue)) { await ProcessQueueAsync(new KeyValuePair <ReferenceWrapper, Queue <MessageWrapper> >(actorReference, queue)); } state.SubscriberMessages.Remove(actorReference); }
/// <summary> /// Unregisters an Actor as a subscriber for messages. /// </summary> /// <param name="actor">Reference to the actor to unsubscribe.</param> /// <param name="messageTypeName">Full type name of message object.</param> /// <param name="flushQueue">Publish any remaining messages.</param> public async Task UnregisterSubscriberAsync(ActorReference actor, string messageTypeName, bool flushQueue) { var actorReference = new ActorReferenceWrapper(actor); await UnregisterSubscriberAsync(actorReference, messageTypeName); }
/// <summary> /// Registers an Actor as a subscriber for messages. /// </summary> /// <param name="actor">Reference to the actor to register.</param> /// <param name="messageTypeName">Full type name of message object.</param> public async Task RegisterSubscriberAsync(ActorReference actor, string messageTypeName) { var actorReference = new ActorReferenceWrapper(actor); await RegisterSubscriberAsync(actorReference, messageTypeName); }