private static IBodyEncoder SelectEncoder(HttpListenerRequest request) { var acceptTypes = request.AcceptTypes; if (acceptTypes == null) { return(_defaultEncoder); } var parsedTypes = acceptTypes .Select(AcceptType.Parse) .Where(pt => pt != null) .OrderByDescending(at => at.Qvalue).ToList(); IBodyEncoder selectedEncoder = null; var maxMatch = 0.0; foreach (var parsedType in parsedTypes) { foreach (var bodyEncoder in _encoders) { var normalizedMatch = (int)parsedType.Matches(bodyEncoder.ContentType) * parsedType.Qvalue + (bodyEncoder.IsDefault ? 1 : 0); if (normalizedMatch > maxMatch) { selectedEncoder = bodyEncoder; maxMatch = normalizedMatch; } } } return(selectedEncoder); }
public void Handle( Message <TPayloadType, TBody> msg, IBodyEncoder <TBody> encoder, IMessageResultMonad <TPayloadType, TBody> messageResultMonad) { task.SetResult(messageResultMonad.To <T>(msg)); }
public void Handle(Message <TPayloadType, TBody> msg, IBodyEncoder <TBody> encoder) { if (msg.MessageResultType == MessageResultType.Success) { subject.OnNext(encoder.Decode <T>(msg.Body)); } }
public NetMqForwardingClientRqRs( IBodyEncoder <TBody> encoder, IOutgoingConnection <TPayloadType, TBody> outgoingConnection, IConnectionIdGenerator connectionIdGenerator) { this.connectionId = connectionIdGenerator.Generate(); this.encoder = encoder; this.outgoingConnection = outgoingConnection; }
private static void SetResponseBody(HttpListenerContext context, IBodyEncoder encoder, string bodyString) { var httpResponse = context.Response; var isHeadRequest = context.Request.HttpMethod.ToUpperInvariant() == "HEAD"; var gzipResponse = RequestEnablesGzip(encoder, context.Request); if (gzipResponse) { httpResponse.AddHeader("Content-Encoding", "gzip"); var memoryStream = new MemoryStream(); try { using ( var uncompressedStream = new MemoryStream(encoder.Encoding.GetBytes(bodyString ?? string.Empty)) ) { using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true)) { uncompressedStream.CopyTo(gzipStream); } } httpResponse.ContentLength64 = memoryStream.Length; if (!isHeadRequest) { httpResponse.OutputStream.Write(memoryStream.GetBuffer(), 0, (int)memoryStream.Length); } memoryStream.Close(); } catch (HttpListenerException) { } finally { memoryStream.Dispose(); } } else { var bodyBuffer = encoder.Encoding.GetBytes(bodyString ?? string.Empty); httpResponse.SendChunked = false; httpResponse.ContentLength64 = bodyBuffer.Length; if (!isHeadRequest) { try { httpResponse.OutputStream.Write(bodyBuffer, 0, bodyBuffer.Length); } catch (HttpListenerException) { } } } }
public NetMqClient( IBodyEncoder <TBody> encoder, IMessageResultMonad <TPayloadType, TBody> messageResultMonad, IOutgoingConnection <TPayloadType, TBody> outgoingConnection, IConnectionIdGenerator connectionIdGenerator) { this.encoder = encoder; this.messageResultMonad = messageResultMonad; this.outgoingConnection = outgoingConnection; this.connectionId = connectionIdGenerator.Generate(); }
private static bool RequestEnablesGzip(IBodyEncoder encoder, HttpListenerRequest request) { if (!encoder.AutoGzipCompression) { return(false); } if (request == null) { return(false); } if (!request.Headers.AllKeys.Contains("Accept-Encoding")) { return(false); } var parts = request.Headers["Accept-Encoding"].Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); return(parts.Any(p => p == "gzip")); }
public MessageResultMonad( IBodyEncoder <TBody> bodyEncoder) { this.bodyEncoder = bodyEncoder; }