public async Task <WirehomeDictionary> PublishRequestAsync(WirehomeDictionary message, TimeSpan timeout)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var request = new MessageBusMessage
            {
                Message = message
            };

            var responseSubscriber = new MessageBusResponseSubscriber();

            try
            {
                _responseSubscribers.TryAdd(request.Uid, responseSubscriber);

                Publish(request);

                using (var timeoutCts = new CancellationTokenSource(timeout))
                {
                    await Task.Run(() => responseSubscriber.Task, timeoutCts.Token).ConfigureAwait(false);

                    return(responseSubscriber.Task.Result.Message);
                }
            }
            finally
            {
                _responseSubscribers.TryRemove(request.Uid, out _);
            }
        }
        public void SetResponse(MessageBusMessage responseMessage)
        {
            if (responseMessage == null)
            {
                throw new ArgumentNullException(nameof(responseMessage));
            }

            _taskCompletionSource.TrySetResult(responseMessage);
        }
        public void Publish(MessageBusMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            message.EnqueuedTimestamp = DateTime.UtcNow;
            _messageQueue.Add(message);

            _inboundCounter.Increment();
        }
Exemple #4
0
        public void EnqueueMessage(MessageBusMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (!MessageBusFilterComparer.IsMatch(message.Message, Filter))
            {
                return;
            }

            _messageQueue.Enqueue(message);
        }
        public void Publish(WirehomeDictionary message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var busMessage = new MessageBusMessage
            {
                Message = message
            };

            Publish(busMessage);
        }
        public void Publish(IDictionary <object, object> message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var busMessage = new MessageBusMessage
            {
                Message = message
            };

            Publish(busMessage);
        }
Exemple #7
0
        public async Task <WirehomeDictionary> PublishRequestAsync(WirehomeDictionary message, TimeSpan timeout)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var request = new MessageBusMessage
            {
                Message = message
            };

            string requestCorrelationUid = null;

            try
            {
                var responseSubscriber = new MessageBusResponseSubscriber();

                if (message.TryGetValue(MessageBusMessagePropertyName.CorrelationUid, out var buffer))
                {
                    requestCorrelationUid = Convert.ToString(buffer, CultureInfo.InvariantCulture);
                }
                else
                {
                    requestCorrelationUid = Guid.NewGuid().ToString("D");
                }

                _responseSubscribers.TryAdd(requestCorrelationUid, responseSubscriber);

                Publish(request);

                using (var timeoutCts = new CancellationTokenSource(timeout))
                {
                    var responseMessage = await Task.Run(() => responseSubscriber.Task, timeoutCts.Token).ConfigureAwait(false);

                    return(responseMessage.Message);
                }
            }
            finally
            {
                if (requestCorrelationUid != null)
                {
                    lock (_responseSubscribers)
                    {
                        _responseSubscribers.Remove(requestCorrelationUid);
                    }
                }
            }
        }
        public void PublishResponse(MessageBusMessage request, WirehomeDictionary responseMessage)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (responseMessage == null)
            {
                throw new ArgumentNullException(nameof(responseMessage));
            }

            var response = new MessageBusMessage
            {
                ResponseUid = request.Uid,
                Message     = responseMessage
            };

            Publish(response);
        }
        public void PublishResponse(WirehomeDictionary request, WirehomeDictionary responseMessage)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (responseMessage == null)
            {
                throw new ArgumentNullException(nameof(responseMessage));
            }

            responseMessage[MessageBusMessagePropertyName.CorrelationUid] =
                request[MessageBusMessagePropertyName.CorrelationUid];

            var response = new MessageBusMessage {
                Message = responseMessage
            };

            Publish(response);
        }
Exemple #10
0
        public void Add(MessageBusMessage message)
        {
            if (message is null)
            {
                throw new global::System.ArgumentNullException(nameof(message));
            }

            if (!_isEnabled)
            {
                return;
            }

            lock (_messages)
            {
                while (_messages.Count >= _maxMessagesCount)
                {
                    _messages.RemoveLast();
                }

                // TODO: Create copy!
                _messages.AddFirst(message);
            }
        }