Exemple #1
0
        public IDisposable AddPublishRouteRule <TPayload>(string[] topics, IRouteRule <TPayload> rule)
        {
            Assert.ArgumentNotNull(rule, nameof(rule));

            var keys = Topics.Canonicalize(topics)
                       .Select(t => GetKey <TPayload>(t ?? string.Empty))
                       .ToArray();

            foreach (var key in keys)
            {
                if (!_publishRoutes.TryAdd(key, rule))
                {
                    throw new Exception($"Could not add route for Payload={typeof(TPayload).Name} Topic={key}. It may have already been added");
                }
            }
            return(new PublishRouteToken <TPayload>(this, keys));
        }
        public IDisposable AddSubscription <TPayload>(string[] topics, ISubscription <TPayload> subscription)
        {
            subscription.Id = Guid.NewGuid();
            if (topics == null)
            {
                AddAllTopicsSubscription(subscription);
                return(new SubscriptionToken <TPayload>(this, null, subscription.Id));
            }

            topics = Topics.Canonicalize(topics);

            _topicMap.TryAdd(subscription.Id, topics);
            foreach (var topic in topics)
            {
                AddTopicSubscription(subscription, topic);
            }

            return(new SubscriptionToken <TPayload>(this, topics, subscription.Id));
        }
Exemple #3
0
        public IDisposable AddSubscription <TPayload>(string[] topics, ISubscription <TPayload> subscription)
        {
            subscription.Id = Guid.NewGuid();
            if (topics == null)
            {
                var topiclessKey = GetKey <TPayload>();
                AddSubscriptionByKey(_topiclessChannels, subscription, topiclessKey);
                return(new SubscriberToken <TPayload>(this, null, subscription.Id));
            }

            topics = Topics.Canonicalize(topics);

            _topicMap.TryAdd(subscription.Id, topics);
            foreach (var topic in topics)
            {
                var key = GetKey <TPayload>(topic);
                AddSubscriptionByKey(_topicChannels, subscription, key);
            }
            return(new SubscriberToken <TPayload>(this, topics, subscription.Id));
        }
Exemple #4
0
        /// <summary>
        /// Create an envelope for a single topic with the given fields set as immutable data
        /// </summary>
        /// <typeparam name="TPayload"></typeparam>
        /// <param name="factory"></param>
        /// <param name="topic"></param>
        /// <param name="payload"></param>
        /// <param name="metadata"></param>
        /// <returns></returns>
        public static Envelope <TPayload> Create <TPayload>(this IEnvelopeFactory factory, string topic, TPayload payload, IReadOnlyDictionary <string, string> metadata = null)
        {
            var topics = Topics.Canonicalize(topic);

            return(factory.Create(topics, payload, metadata));
        }
 public IFilterRouteBuilderWhen <T> FromTopic(string topic)
 {
     InTopics = Topics.Canonicalize(topic);
     return(this);
 }
 public IFilterRouteBuilderWhen <T> FromTopics(IEnumerable <string> topics)
 {
     InTopics = Topics.Canonicalize(topics);
     return(this);
 }
 public IFilterRouteBuilderWhen <T> FromTopics(params string[] topics)
 {
     InTopics = Topics.Canonicalize(topics);
     return(this);
 }