Beispiel #1
0
        public IDestination <TMessage> Get <TMessage>(string destination, ISubscriptionBehavior <TMessage> subscriptionBehavior)
            where TMessage : IMessage
        {
            var retVal = _destinationsByName.GetOrAdd(new DestinationKey(destination, subscriptionBehavior), @neverMind => CreateDestination(destination, subscriptionBehavior));

            var castedRetVal = (RefCountStompDestination <TMessage>)retVal;

            castedRetVal.Increment();

            return(castedRetVal);
        }
Beispiel #2
0
        public StompDestination(ITransport transport, string destination, int id, IObservable <IMessage> incommingMessages, ISubscriptionBehavior <TMessage> subscriptionBehavior)
        {
            _transport            = transport;
            _destination          = destination;
            _id                   = id;
            _incommingMessages    = incommingMessages;
            _subscriptionBehavior = subscriptionBehavior;

            _incommingMessagesObservable =
                Observable.Create(new Func <IObserver <IMessage>, Task <IDisposable> >(RegisterToQueue))
                .Select(_subscriptionBehavior.Transform)
                .Publish()
                .RefCount();
        }
Beispiel #3
0
 public SubscriptionBehaviorProvider(ITransport transport)
 {
     _clientAcknowledge = new AcknowledgeSubscriptionBehavior(transport, AcknowledgeMode.Client);
     _clientIndividualAcknowledge = new AcknowledgeSubscriptionBehavior(transport, AcknowledgeMode.ClientIndividual);
 }
 public SubscriptionBehaviorProvider(ITransport transport)
 {
     _clientAcknowledge           = new AcknowledgeSubscriptionBehavior(transport, AcknowledgeMode.Client);
     _clientIndividualAcknowledge = new AcknowledgeSubscriptionBehavior(transport, AcknowledgeMode.ClientIndividual);
 }
 public IDestination <TMessage> GetDestination <TMessage>(string destination, ISubscriptionBehavior <TMessage> subscriptionBehavior)
     where TMessage : IMessage
 {
     return(_destinationStorage.Get(destination, subscriptionBehavior));
 }
Beispiel #6
0
        private RefCountStompDestination <TMessage> CreateDestination <TMessage>(string destination, ISubscriptionBehavior <TMessage> subscriptionBehavior)
            where TMessage : IMessage
        {
            var destinationKey = new DestinationKey(destination, subscriptionBehavior);

            var subject = new Subject <IMessage>();
            int id      = Interlocked.Increment(ref _idSequence);

            _destinationsById[id] = subject;

            var retVal =
                new RefCountStompDestination <TMessage>(
                    new StompDestination <TMessage>(_transport, destination, id, subject, subscriptionBehavior), () => OnDispose(destinationKey, id));

            return(retVal);
        }