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); }
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(); }
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)); }
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); }