Example #1
0
        private Task SendResponseAsync(
            IMqResponseFeature mqResponse,
            IHttpResponseFeature httpResponse,
            IHeaderConverter headerConverter
            )
        {
            var needPublish = false;
            var needAck     = mqResponse.AckDeliveryTag.HasValue;

            if (mqResponse.Exchange != null)
            {
                MergeResponseHeaders(mqResponse, httpResponse, headerConverter);
                needPublish = true;
            }

            return(Task.Run(() =>
            {
                if (needPublish)
                {
                    _mqConnection.Model.BasicPublish(mqResponse.Exchange, mqResponse.RoutingKey, mqResponse.Mandatory, mqResponse.Properties, GetBody(mqResponse));
                }
                if (needAck)
                {
                    _mqConnection.Model.BasicAck(mqResponse.AckDeliveryTag.Value, multiple: false);
                }
            }));
        }
 public ToModelConverter(ITimeParser timeParser, IHeaderConverter headerConverter,
                         IHourConverter hourConverter, IMinuteConverter minuteConverter)
 {
     _timeParser      = timeParser;
     _headerConverter = headerConverter;
     _hourConverter   = hourConverter;
     _minuteConverter = minuteConverter;
 }
Example #3
0
        private IHttpRequestFeature CreateHttpRequest(IMqRequestFeature mqRequest, IHeaderConverter headerConverter)
        {
            var props   = mqRequest.Properties;
            var headers = props?.Headers;

            var httpRequest = new HttpRequestFeature
            {
                Scheme   = "amqp",
                Protocol = _mqConnection.Connection.Protocol.ApiName,
            };

            httpRequest.PathBase = _pathBaseBase
                                   + "/" + (mqRequest.Exchange ?? String.Empty)
                                   + "/" + (mqRequest.RoutingKey ?? String.Empty);

            if (mqRequest.Body != null)
            {
                httpRequest.Body = new MemoryStream(mqRequest.Body, writable: false);
                httpRequest.Headers[HeaderNames.ContentLength] = mqRequest.Body.LongLength.ToString();
            }

            if (props != null)
            {
                // TODO: fill headers from props.
            }

            if (headers != null)
            {
                if (headers.TryGetValue(HeaderNames.Method, out var rawMethod))
                {
                    httpRequest.Method = headerConverter.ReadString(rawMethod);
                }
                if (headers.TryGetValue(HeaderNames.Path, out var rawPath))
                {
                    httpRequest.Path = headerConverter.ReadString(rawPath);
                }
                if (headers.TryGetValue(HeaderNames.QueryString, out var rawQueryString))
                {
                    httpRequest.QueryString = headerConverter.ReadString(rawQueryString);
                }

                foreach (var item in headers)
                {
                    httpRequest.Headers[item.Key] = headerConverter.Read(item.Value);
                }
            }

            return(httpRequest);
        }
Example #4
0
        private static void MergeResponseHeaders(IMqResponseFeature mqResponse, IHttpResponseFeature httpResponse, IHeaderConverter headerConverter)
        {
            var headers = mqResponse.Properties.Headers;

            foreach (var item in httpResponse.Headers)
            {
                headers[item.Key] = headerConverter.Write(item.Value);
            }
        }