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