/// <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>());
            }
        }
示例#2
0
        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);
        }