예제 #1
0
 /// <summary>
 /// Sets the ipc internal headers.
 /// </summary>
 /// <param name="messageToSend">The message to send.</param>
 /// <param name="responseId">The response identifier.</param>
 private void SetIpcInternalHeaders(IMessage messageToSend, IResponseId responseId)
 {
     messageToSend.SetInternalHeader(Configuration.HeaderNames.StandardHeaders.RpcTimeout,
                                     _rpcTimeoutFactory.Create(responseId.TimeOut));
     messageToSend.SetInternalHeader(Configuration.HeaderNames.StandardHeaders.RpcResponseId,
                                     responseId.MessageId.Id.Value.ToString());
 }
예제 #2
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="responseId">The response identifier.</param>
        /// <returns></returns>
        public async Task <IQueueOutputMessage> SendAsync(T message, IResponseId responseId)
        {
            ThrowIfDisposed();
            var data = new AdditionalMessageData();

            return(await SendAsync(message, responseId, data).ConfigureAwait(false));
        }
예제 #3
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="responseId">The response identifier.</param>
        /// <param name="inputData">The additional message data.</param>
        /// <returns></returns>
        public async Task <IQueueOutputMessage> SendAsync(T message, IResponseId responseId, IAdditionalMessageData inputData)
        {
            ThrowIfDisposed();

            Guard.NotNull(() => message, message);
            Guard.NotNull(() => responseId, responseId);

            var data = SetupForSend(message, responseId, inputData);

            //send the message to the transport
            return(await _sendMessages.SendAsync(data.Item1, data.Item2).ConfigureAwait(false));
        }
예제 #4
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="responseId">The response identifier.</param>
        /// <param name="inputData"></param>
        /// <returns></returns>
        public IQueueOutputMessage Send(T message, IResponseId responseId, IAdditionalMessageData inputData = null)
        {
            ThrowIfDisposed();

            Guard.NotNull(() => message, message);
            Guard.NotNull(() => responseId, responseId);

            var data = SetupForSend(message, responseId, inputData);

            //send the message to the transport
            return(_sendMessages.Send(data.Item1, data.Item2));
        }
예제 #5
0
        private Tuple <IMessage, IAdditionalMessageData> SetupForSend(T message, IResponseId responseId, IAdditionalMessageData inputData)
        {
            var data = inputData ?? new AdditionalMessageData();

            if (!Configuration.IsReadOnly)
            {
                Configuration.SetReadOnly();
            }

            var additionalHeaders = _generateMessageHeaders.HeaderSetup(data);

            //construct our wrapper around the data to send
            var messageToSend = _messageFactory.Create(message, additionalHeaders);

            _addStandardMessageHeaders.AddHeaders(messageToSend, data);

            SetIpcInternalHeaders(messageToSend, responseId);

            return(new Tuple <IMessage, IAdditionalMessageData>(messageToSend, data));
        }