Ejemplo n.º 1
0
        private ReefHttpRequest ToHttpRequest(AvroHttpRequest avroRequest)
        {
            ReefHttpRequest httpRequest = new ReefHttpRequest();

            httpRequest.PathInfo    = avroRequest.PathInfo;
            httpRequest.InputStream = avroRequest.InputStream;
            httpRequest.Url         = avroRequest.RequestUrl;
            httpRequest.Querystring = avroRequest.QueryString;

            HttpMethod m;

            HttpMethod.TryParse(avroRequest.HttpMethod, true, out m);
            httpRequest.Method = m;
            return(httpRequest);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Called when receving an http request from Java side
        /// </summary>
        /// <param name="httpMessage">The HTTP message.</param>
        public void OnNext(IHttpMessage httpMessage)
        {
            LOGGER.Log(Level.Info, "HttpHandler OnNext is called");
            string requestString = httpMessage.GetRequestString();

            if (requestString != null && requestString.Equals(SPEC))
            {
                LOGGER.Log(Level.Info, "HttpHandler OnNext, requestString:" + requestString);
                LOGGER.Log(Level.Info, "HttpHandler OnNext, port number:" + httpServerPort.PortNumber);

                httpMessage.SetUriSpecification(GetAllSpecifications());
            }
            else
            {
                LOGGER.Log(Level.Info, "HttpHandler OnNext, handling http request.");
                byte[]          byteData        = httpMessage.GetQueryReuestData();
                AvroHttpRequest avroHttpRequest = AvroHttpSerializer.FromBytes(byteData);
                LOGGER.Log(Level.Info, "HttpHandler OnNext, requestData:" + avroHttpRequest);

                string spec = GetSpecification(avroHttpRequest.PathInfo);
                if (spec != null)
                {
                    LOGGER.Log(Level.Info, "HttpHandler OnNext, target:" + spec);
                    ReefHttpRequest  request  = ToHttpRequest(avroHttpRequest);
                    ReefHttpResponse response = new ReefHttpResponse();

                    IHttpHandler handler;
                    eventHandlers.TryGetValue(spec.ToLower(CultureInfo.CurrentCulture), out handler);

                    byte[] responseData;
                    if (handler != null)
                    {
                        LOGGER.Log(Level.Info, "HttpHandler OnNext, get eventHandler:" + handler.GetSpecification());
                        handler.OnHttpRequest(request, response);
                        responseData = response.OutputStream;
                    }
                    else
                    {
                        responseData =
                            ByteUtilities.StringToByteArrays(string.Format(CultureInfo.CurrentCulture,
                                                                           "No event handler found at CLR side for {0}.",
                                                                           spec));
                    }
                    httpMessage.SetQueryResponseData(responseData);
                }
            }
        }