Esempio n. 1
0
        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));
     }
 }
Esempio n. 4
0
 public NetMqForwardingClientRqRs(
     IBodyEncoder <TBody> encoder,
     IOutgoingConnection <TPayloadType, TBody> outgoingConnection,
     IConnectionIdGenerator connectionIdGenerator)
 {
     this.connectionId       = connectionIdGenerator.Generate();
     this.encoder            = encoder;
     this.outgoingConnection = outgoingConnection;
 }
Esempio n. 5
0
        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();
 }
Esempio n. 7
0
        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"));
        }
Esempio n. 8
0
 public MessageResultMonad(
     IBodyEncoder <TBody> bodyEncoder)
 {
     this.bodyEncoder = bodyEncoder;
 }