internal MessagePublisher(IMessagingEntityFactory messagingEntityFactory, IMessageSerializer serializer, IMessagePropertyProvider <TMessage> propertyProvider, IMessageOutgoingPropertiesTable messageOutgoingPropertiesTable) { if (messagingEntityFactory == null) { throw new ArgumentNullException(nameof(messagingEntityFactory)); } if (serializer == null) { throw new ArgumentNullException(nameof(serializer)); } if (propertyProvider == null) { throw new ArgumentNullException(nameof(propertyProvider)); } if (messageOutgoingPropertiesTable == null) { throw new ArgumentNullException(nameof(messageOutgoingPropertiesTable)); } _messagingEntityFactory = messagingEntityFactory; _serializer = serializer; _propertyProvider = propertyProvider; _messageOutgoingPropertiesTable = messageOutgoingPropertiesTable; _messageTypeMessageSenderMap = new ConcurrentDictionary <Type, IMessageSender>(); }
internal MessageSource(IMessagingEntityFactory messagingEntityFactory, IEnumerable <IMessageDeserializer <TMessage> > deserializers, IMessageBrokeredMessageTable messageBrokeredMessageTable) { if (messagingEntityFactory == null) { throw new ArgumentNullException(nameof(messagingEntityFactory)); } IObservable <BrokeredMessage> brokeredMessages = CreateBrokeredMessageObservableFromMessageReceiver(messagingEntityFactory); Initialize(brokeredMessages, deserializers, messageBrokeredMessageTable); }
private IObservable <BrokeredMessage> CreateBrokeredMessageObservableFromMessageReceiver(IMessagingEntityFactory messagingEntityFactory) { _messageReceiverBrokeredMessageObservableCancellationTokenSource = new CancellationTokenSource(); return(Observable.Create <BrokeredMessage>(async(observer, cancellationToken) => { IMessageReceiver messageReceiver = messagingEntityFactory.CreateMessageReceiver(typeof(TMessage)); while (!cancellationToken.IsCancellationRequested && !_messageReceiverBrokeredMessageObservableCancellationTokenSource.IsCancellationRequested && !messageReceiver.IsClosed) { BrokeredMessage nextMessage = await messageReceiver.ReceiveAsync(); // NOTE: could pass the CancellationToken in here if ReceiveAsync is ever updated to accept it if (nextMessage != null) { observer.OnNext(nextMessage); } } return () => messageReceiver.Dispose(); }).Publish().RefCount()); }