Exemplo n.º 1
0
        /// <summary>
        /// The run.
        /// </summary>
        /// <param name="requestId">
        /// The request identifier.
        /// </param>
        /// <param name="routePath">
        /// The route path.
        /// </param>
        /// <param name="parameters">
        /// The parameters.
        /// </param>
        /// <param name="postData">
        /// The post data.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        /// <exception cref="Exception">
        /// Generic exception - Route path not valid.
        /// </exception>
        public static ChromelyResponse Run(string requestId, RoutePath routePath, object parameters, object postData)
        {
            var response = new ChromelyResponse(requestId);

            if (string.IsNullOrEmpty(routePath.Path))
            {
                response.ReadyState = (int)ReadyState.ResponseIsReady;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Bad Request";

                return(response);
            }

            if (routePath.Path.ToLower().Equals("/info"))
            {
                response = GetInfo();
                return(response);
            }

            var route = ServiceRouteProvider.GetRoute(routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath} is null or invalid.");
            }

            return(ExcuteRoute(requestId, routePath, parameters, postData));
        }
Exemplo n.º 2
0
        public ChromelyResponse Run(ChromelyRequest request)
        {
            if (request.RoutePath == null)
            {
                return(GetBadRequestResponse(request.Id));
            }

            if (string.IsNullOrEmpty(request.RoutePath.Path))
            {
                return(GetBadRequestResponse(request.Id));
            }

            if (request.RoutePath.Path.ToLower().Equals("/info"))
            {
                return(GetInfo(request.Id));
            }

            var route = ServiceRouteProvider.GetActionRoute(_container, request.RoutePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {request.RoutePath} is null or invalid.");
            }

            var parameters = request.Parameters ?? request.RoutePath.Path.GetParameters()?.ToObjectDictionary();
            var postData   = request.PostData;

            return(ExecuteRoute(request.Id, request.RoutePath, parameters, postData, request.RawJson));
        }
Exemplo n.º 3
0
        private async Task <ChromelyResponse> ExecuteRouteAsync(string requestId, RoutePath routePath, IDictionary <string, string> parameters, object postData, string requestData)
        {
            var route = ServiceRouteProvider.GetActionRoute(_container, routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath} is null or invalid.");
            }

            ChromelyResponse response;

            if (route.IsAsync)
            {
                response = await route.InvokeAsync(requestId : requestId, routePath : routePath, parameters : parameters, postData : postData, rawJson : requestData);
            }
            else
            {
                response = route.Invoke(requestId: requestId, routePath: routePath, parameters: parameters, postData: postData, rawJson: requestData);
            }

            response.ReadyState = (int)ReadyState.ResponseIsReady;
            response.Status     = (int)System.Net.HttpStatusCode.OK;
            response.StatusText = "OK";

            return(response);
        }
Exemplo n.º 4
0
        public ChromelyResponse Run(string method, string path, IDictionary <string, string> parameters, object postData)
        {
            var response  = new ChromelyResponse();
            var routePath = new RoutePath(method, path);

            if (routePath == null || string.IsNullOrWhiteSpace(routePath?.Path))
            {
                response.ReadyState = (int)ReadyState.ResponseIsReady;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Bad Request";

                return(response);
            }

            if (routePath.Path.ToLower().Equals("/info"))
            {
                response = GetInfo();
                return(response);
            }

            var route = ServiceRouteProvider.GetActionRoute(_container, routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath.Path} is null or invalid.");
            }

            return(ExecuteRoute(string.Empty, routePath, parameters, postData, string.Empty));
        }
Exemplo n.º 5
0
        public void ScannerShouldInstantiateScannerControllerWithInjectedDependencies()
        {
            const string TestRoute = "/scannercontroller/get2";

            var test = new TestDependency();

            IoC.RegisterInstance <ITestDependency>(nameof(ITestDependency), test);

            var logger = new TestLogger();

            IoC.RegisterInstance <IChromelyLogger>(nameof(IChromelyLogger), logger);

            var scanner       = new RouteScanner(Assembly.GetExecutingAssembly());
            var routeCommands = scanner.Scan();

            foreach (var route in routeCommands.Item1)
            {
                ServiceRouteProvider.AddRoute(route.Key, route.Value);
            }

            foreach (var command in routeCommands.Item2)
            {
                ServiceRouteProvider.AddCommand(command.Key, command.Value);
            }

            var request = new ChromelyRequest(new RoutePath(Method.GET, TestRoute), null, null);

            var routePath   = new RoutePath(Method.GET, TestRoute);
            var get2        = ServiceRouteProvider.GetRoute(routePath);
            var getResponse = get2.Invoke(request);

            Assert.Equal(TestDependency.TestDependencyResponse, getResponse.Data.ToString());
            Assert.Equal(ScannerControllerWithDependencyInjection.Get2Response, logger.Message);
        }
Exemplo n.º 6
0
        /// <summary>
        /// The run.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        /// <exception cref="Exception">
        /// Generic exception - Route path not valid.
        /// </exception>
        public static ChromelyResponse Run(CefRequest request)
        {
            var    uri  = new Uri(request.Url);
            string path = uri.LocalPath;

            var response = new ChromelyResponse();

            if (string.IsNullOrEmpty(path))
            {
                response.ReadyState = (int)ReadyState.ResponseIsReady;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Bad Request";

                return(response);
            }

            if (path.ToLower().Equals("/info"))
            {
                response = GetInfo();
                return(response);
            }

            var routePath = new RoutePath(request.Method, path);
            var route     = ServiceRouteProvider.GetRoute(routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {path} is null or invalid.");
            }

            var parameters = request.Url.GetParameters();
            var postData   = GetPostData(request);

            return(ExcuteRoute(string.Empty, routePath, parameters, postData));
        }
Exemplo n.º 7
0
        public void RegisterRoutes()
        {
            // Get all Controllers
            var controllerObjs = _container.GetAllInstances(typeof(ChromelyController)).ToList();

            if (controllerObjs != null && controllerObjs.Any())
            {
                foreach (var obj in controllerObjs)
                {
                    var controller = obj as ChromelyController;
                    if (controller != null)
                    {
                        ServiceRouteProvider.RegisterActionRoutes(_container, controller.ActionRouteDictionary);
                        ServiceRouteProvider.RegisterCommnandRoutes(_container, controller.CommandRouteDictionary);

                        var actionRouteDictionary  = new Dictionary <string, ActionRoute>();
                        var commandRouteDictionary = new Dictionary <string, CommandRoute>();

                        var controllerFactory = new ChromelyControllerFactory(_container);

                        // Add Http Attributes
                        var httpAttributeRoutes = controllerFactory.GetHttpAttributeRoutes(controller);
                        if ((httpAttributeRoutes != null) && httpAttributeRoutes.Any())
                        {
                            foreach (var item in httpAttributeRoutes)
                            {
                                if (!actionRouteDictionary.ContainsKey(item.Key))
                                {
                                    actionRouteDictionary.Add(item.Key, item.Value);
                                }
                            }
                        }

                        // Add Custom Attributes
                        var customAttributeRoutes = controllerFactory.GetCommandAttributeRoutes(controller);
                        if ((customAttributeRoutes != null) && customAttributeRoutes.Any())
                        {
                            foreach (var item in customAttributeRoutes)
                            {
                                if (!commandRouteDictionary.ContainsKey(item.Key))
                                {
                                    commandRouteDictionary.Add(item.Key, item.Value);
                                }
                            }
                        }


                        ServiceRouteProvider.RegisterActionRoutes(_container, actionRouteDictionary);
                        ServiceRouteProvider.RegisterCommnandRoutes(_container, commandRouteDictionary);
                    }
                }
            }
        }
Exemplo n.º 8
0
        public override bool OnQuery(CefBrowser browser, CefFrame frame, long queryId, string request, bool persistent, CefMessageRouterBrowserSide.Callback callback)
        {
            var options = new JsonSerializerOptions();

            options.ReadCommentHandling = JsonCommentHandling.Skip;
            options.AllowTrailingCommas = true;
            var requestData = JsonSerializer.Deserialize <request>(request, options);

            var method = requestData.method ?? string.Empty;

            if (RoutePath.ValidMethod(method))
            {
                var id        = requestData.id ?? string.Empty;
                var path      = requestData.url ?? string.Empty;
                var routePath = new RoutePath(method, path);

                bool isRequestAsync = ServiceRouteProvider.IsActionRouteAsync(_container, routePath);

                if (isRequestAsync)
                {
                    Task.Run(async() =>
                    {
                        var parameters = requestData.parameters;
                        var postData   = requestData.postData;

                        var response     = await _requestTaskRunner.RunAsync(id, routePath, parameters, postData, request);
                        var jsonResponse = response.ToJson();

                        callback.Success(jsonResponse);
                    });
                }
                else
                {
                    Task.Run(() =>
                    {
                        var parameters = requestData.parameters;
                        var postData   = requestData.postData;

                        var response     = _requestTaskRunner.Run(id, routePath, parameters, postData, request);
                        var jsonResponse = response.ToJson();

                        callback.Success(jsonResponse);
                    });
                }

                return(true);
            }

            callback.Failure(100, "Request is not valid.");
            return(false);
        }
Exemplo n.º 9
0
        public void ScanAssemblies()
        {
            if ((ServiceAssemblies == null) || (ServiceAssemblies.Count == 0))
            {
                return;
            }

            foreach (var assembly in ServiceAssemblies)
            {
                RouteScanner scanner = new RouteScanner(assembly);
                Dictionary <string, Route> currentRouteDictionary = scanner.Scan();
                ServiceRouteProvider.MergeRoutes(currentRouteDictionary);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// The scan assemblies.
        /// </summary>
        public void ScanAssemblies()
        {
            if ((this.ServiceAssemblies == null) ||
                (this.ServiceAssemblies.Count == 0))
            {
                return;
            }

            foreach (var assembly in this.ServiceAssemblies)
            {
                var scanner = new RouteScanner(assembly);
                var currentRouteDictionary = scanner.Scan();
                ServiceRouteProvider.MergeRoutes(currentRouteDictionary);
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// The excute route async.
        /// </summary>
        /// <param name="requestId">
        /// The request id.
        /// </param>
        /// <param name="routePath">
        /// The route path.
        /// </param>
        /// <param name="parameters">
        /// The parameters.
        /// </param>
        /// <param name="postData">
        /// The post data.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        private static async Task <ChromelyResponse> ExcuteRouteAsync(string requestId, RoutePath routePath, object parameters, object postData)
        {
            var route = ServiceRouteProvider.GetRoute(routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath} is null or invalid.");
            }

            ChromelyResponse response;

            try
            {
                if (route.IsAsync)
                {
                    // ReSharper disable once ConsiderUsingConfigureAwait
                    response = await route.InvokeAsync(
                        requestId,
                        routePath,
                        parameters?.ToObjectDictionary(),
                        postData);
                }
                else
                {
                    response = route.Invoke(
                        requestId,
                        routePath,
                        parameters?.ToObjectDictionary(),
                        postData);
                }

                response.ReadyState = (int)ReadyState.ResponseIsReady;
                response.Status     = (int)System.Net.HttpStatusCode.OK;
                response.StatusText = "OK";
            }
            catch (Exception exception)
            {
                Log.Error(exception);
                response = new ChromelyResponse
                {
                    ReadyState = (int)ReadyState.ResponseIsReady,
                    Status     = (int)System.Net.HttpStatusCode.InternalServerError,
                    StatusText = "Error"
                };
            }

            return(response);
        }
        private ChromelyResponse ExecuteRoute(string requestId, RoutePath routePath, IDictionary <string, string> parameters, object postData, string requestData)
        {
            var route = ServiceRouteProvider.GetActionRoute(_container, routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath} is null or invalid.");
            }

            var response = route.Invoke(requestId: requestId, routePath: routePath, parameters: parameters, postData: postData, rawJson: requestData);

            response.ReadyState = (int)ReadyState.ResponseIsReady;
            response.Status     = (response.Status == 0) ? (int)HttpStatusCode.OK : response.Status;
            response.StatusText = (string.IsNullOrWhiteSpace(response.StatusText) && (response.Status == (int)HttpStatusCode.OK)) ? "OK" : response.StatusText;

            return(response);
        }
Exemplo n.º 13
0
        /// <summary>
        /// The excute route.
        /// </summary>
        /// <param name="requestId">
        /// The request identifier.
        /// </param>
        /// <param name="routePath">
        /// The route path.
        /// </param>
        /// <param name="parameters">
        /// The parameters.
        /// </param>
        /// <param name="postData">
        /// The post data.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        /// <exception cref="Exception">
        /// Generic exception - Route path not valid.
        /// </exception>
        private static ChromelyResponse ExcuteRoute(string requestId, RoutePath routePath, object parameters, object postData)
        {
            var route = ServiceRouteProvider.GetRoute(routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath} is null or invalid.");
            }

            var response = route.Invoke(requestId: requestId, routePath: routePath, parameters: parameters?.ToObjectDictionary(), postData: postData);

            response.ReadyState = (int)ReadyState.ResponseIsReady;
            response.Status     = (int)System.Net.HttpStatusCode.OK;
            response.StatusText = "OK";

            return(response);
        }
        public void RouteProviderTest()
        {
            var routeDict = BaseTest();

            Assert.Equal(3, routeDict.Count);

            foreach (var item in routeDict)
            {
                ServiceRouteProvider.AddRoute(item.Key, item.Value);
            }

            var getRoute1 = ServiceRouteProvider.GetRoute(new RoutePath(Method.GET, "/testcontroller/get1"));
            var getRoute2 = ServiceRouteProvider.GetRoute(new RoutePath(Method.GET, "/testcontroller/get2"));
            var postRoute = ServiceRouteProvider.GetRoute(new RoutePath(Method.POST, "/testcontroller/save"));

            Assert.True((getRoute1 != null) || (getRoute2 != null) || (postRoute != null));
        }
Exemplo n.º 15
0
        public void RouteProviderTest()
        {
            var routeDict = BaseTest();

            Assert.Equal(3, routeDict.Count);

            foreach (var item in routeDict)
            {
                ServiceRouteProvider.AddRoute(item.Key, item.Value);
            }

            foreach (var item in routeDict)
            {
                var route = ServiceRouteProvider.GetRoute(item.Key);
                Assert.NotNull(route);
            }
        }
Exemplo n.º 16
0
        private static ChromelyResponse ExcuteRoute(string routePath, object parameters, object postData)
        {
            ChromelyResponse response = new ChromelyResponse();

            Route route = ServiceRouteProvider.GetRoute(routePath);

            if (route == null)
            {
                throw new Exception(string.Format("Route for path = {0} is null or invalid.", routePath));
            }

            response            = route.Invoke(routePath, parameters: parameters?.ToObjectDictionary(), postData: postData);
            response.ReadyState = (int)ReadyState.ResponseIsReady;
            response.Status     = (int)System.Net.HttpStatusCode.OK;
            response.StatusText = "OK";

            return(response);
        }
Exemplo n.º 17
0
        public void RegisterRoutes()
        {
            // Get all Controllers
            var controllerObjs = _container.GetAllInstances(typeof(ChromelyController)).ToList();

            if (controllerObjs != null && controllerObjs.Any())
            {
                foreach (var obj in controllerObjs)
                {
                    var controller = obj as ChromelyController;
                    if (controller != null)
                    {
                        ServiceRouteProvider.RegisterActionRoutes(_container, controller.ActionRouteDictionary);
                        ServiceRouteProvider.RegisterCommnandRoutes(_container, controller.CommandRouteDictionary);
                    }
                }
            }
        }
Exemplo n.º 18
0
        public void RouteProviderTest()
        {
            var routeDict = BaseTest();

            Assert.Equal(3, routeDict.Count);

            foreach (var item in routeDict)
            {
                ServiceRouteProvider.AddRoute(item.Key, item.Value);
            }

            foreach (var item in routeDict)
            {
                var getRoute  = ServiceRouteProvider.GetRoute(new RoutePath(Method.GET, item.Key));
                var postRoute = ServiceRouteProvider.GetRoute(new RoutePath(Method.GET, item.Key));
                Assert.True((getRoute != null) || (postRoute != null));
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// The scan assemblies.
        /// </summary>
        public void ScanAssemblies()
        {
            if ((this.HostConfig?.ServiceAssemblies == null) || (this.HostConfig?.ServiceAssemblies.Count == 0))
            {
                return;
            }

            foreach (var assembly in this.HostConfig?.ServiceAssemblies)
            {
                if (!assembly.IsScanned)
                {
                    RouteScanner scanner = new RouteScanner(assembly.Assembly);
                    Dictionary <string, Route> currentRouteDictionary = scanner.Scan();
                    ServiceRouteProvider.MergeRoutes(currentRouteDictionary);

                    assembly.IsScanned = true;
                }
            }
        }
        public void Run(string url)
        {
            try
            {
                var commandPath = GetPathFromUrl(url);
                var command     = ServiceRouteProvider.GetCommandRoute(_container, commandPath);

                if (command == null)
                {
                    Logger.Instance.Log.Error($"Command for path = {commandPath} is null or invalid.");
                    return;
                }

                var queryParameters = GetQueryParameters(url);
                command.Invoke(queryParameters);
            }
            catch (Exception exception)
            {
                Logger.Instance.Log.Error(exception);
            }
        }
Exemplo n.º 21
0
        /// <summary>
        /// The scan assemblies.
        /// </summary>
        public void ScanAssemblies()
        {
            if ((HostConfig?.ServiceAssemblies == null) || (HostConfig?.ServiceAssemblies.Count == 0))
            {
                return;
            }

            foreach (var assembly in HostConfig?.ServiceAssemblies)
            {
                if (!assembly.IsScanned)
                {
                    var scanner = new RouteScanner(assembly.Assembly);
                    var currentRouteDictionary   = scanner.Scan().Item1;
                    var currentCommandDictionary = scanner.Scan().Item2;
                    ServiceRouteProvider.MergeRoutes(currentRouteDictionary);
                    ServiceRouteProvider.MergeCommands(currentCommandDictionary);

                    assembly.IsScanned = true;
                }
            }
        }
Exemplo n.º 22
0
        public ChromelyResponse Run(string requestId, RoutePath routePath, IDictionary <string, string> parameters, object postData, string requestData)
        {
            if (string.IsNullOrEmpty(routePath.Path))
            {
                return(GetBadRequestResponse(requestId));
            }

            if (routePath.Path.ToLower().Equals("/info"))
            {
                return(GetInfo(requestId));
            }

            var route = ServiceRouteProvider.GetActionRoute(_container, routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath} is null or invalid.");
            }

            return(ExecuteRoute(requestId, routePath, parameters, postData, requestData));
        }
Exemplo n.º 23
0
        public ChromelyResponse Run(ChromelyRequest request)
        {
            var response = new ChromelyResponse(request.Id);

            if (request.RoutePath == null)
            {
                response.ReadyState = (int)ReadyState.ResponseIsReady;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Bad Request";

                return(response);
            }

            if (string.IsNullOrEmpty(request.RoutePath.Path))
            {
                response.ReadyState = (int)ReadyState.ResponseIsReady;
                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                response.StatusText = "Bad Request";

                return(response);
            }

            if (request.RoutePath.Path.ToLower().Equals("/info"))
            {
                response = GetInfo();
                return(response);
            }

            var route = ServiceRouteProvider.GetActionRoute(_container, request.RoutePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {request.RoutePath} is null or invalid.");
            }

            var parameters = request.Parameters ?? request.RoutePath.Path.GetParameters()?.ToObjectDictionary();
            var postData   = request.PostData;

            return(ExecuteRoute(request.Id, request.RoutePath, parameters, postData, request.RawJson));
        }
Exemplo n.º 24
0
        public void ScanAssemblies()
        {
            if ((_config?.ControllerAssemblies == null) || (_config?.ControllerAssemblies.Count == 0))
            {
                return;
            }

            foreach (var assembly in _config?.ControllerAssemblies)
            {
                if (!assembly.IsScanned)
                {
                    var scanner       = new RouteScanner(assembly.Assembly, _container);
                    var scanResult    = scanner.Scan();
                    var actionRoutes  = scanResult?.Item1;
                    var commandRoutes = scanResult?.Item2;
                    ServiceRouteProvider.RegisterActionRoutes(_container, actionRoutes);
                    ServiceRouteProvider.RegisterCommnandRoutes(_container, commandRoutes);

                    assembly.IsScanned = true;
                }
            }
        }
Exemplo n.º 25
0
        public async Task <ChromelyResponse> RunAsync(string method, string path, IDictionary <string, string> parameters, object postData)
        {
            var routePath = new RoutePath(method, path);

            if (routePath == null || string.IsNullOrWhiteSpace(routePath?.Path))
            {
                return(GetBadRequestResponse(null));
            }

            if (routePath.Path.ToLower().Equals("/info"))
            {
                return(GetInfo(string.Empty));
            }

            var route = ServiceRouteProvider.GetActionRoute(_container, routePath);

            if (route == null)
            {
                throw new Exception($"Route for path = {routePath.Path} is null or invalid.");
            }

            return(await ExecuteRouteAsync(string.Empty, routePath, parameters, postData, string.Empty));
        }
Exemplo n.º 26
0
        /// <summary>
        /// The run command async.
        /// </summary>
        /// <param name="url">
        /// The url.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public static void RunAsync(string url)
        {
            Task.Run(() =>
            {
                try
                {
                    var commandPath = GetPathFromUrl(url);
                    var command     = ServiceRouteProvider.GetCommand(commandPath);

                    if (command == null)
                    {
                        Log.Error($"Command for path = {commandPath} is null or invalid.");
                        return;
                    }

                    var queryParameters = GetQueryParameters(url);
                    command.Invoke(queryParameters);
                }
                catch (Exception exception)
                {
                    Log.Error(exception);
                }
            });
        }
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var isCustomScheme = _config?.UrlSchemes?.IsUrlRegisteredCustomScheme(request.Url);

            if (isCustomScheme.HasValue && isCustomScheme.Value)
            {
                var uri  = new Uri(request.Url);
                var path = uri.LocalPath;

                bool isRequestAsync = ServiceRouteProvider.IsActionRouteAsync(_container, new RoutePath(request.Method, path));
                if (isRequestAsync)
                {
                    ProcessRequestAsync(path);
                }
                else
                {
                    ProcessRequest(path);
                }

                return(true);
            }

            Logger.Instance.Log.Error($"Url {request.Url} is not of a registered custom scheme.");
            callback.Dispose();
            return(false);

            #region Process Request

            void ProcessRequest(string path)
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var response = new ChromelyResponse();
                            if (string.IsNullOrEmpty(path))
                            {
                                response.ReadyState = (int)ReadyState.ResponseIsReady;
                                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                                response.StatusText = "Bad Request";

                                _chromelyResponse = response;
                            }
                            else
                            {
                                var parameters = request.Url.GetParameters();
                                var postData   = GetPostData(request);

                                _chromelyResponse = _requestTaskRunner.Run(request.Method, path, parameters, postData);
                                string jsonData   = _chromelyResponse.Data.EnsureResponseDataIsJsonFormat();
                                _responseBytes    = Encoding.UTF8.GetBytes(jsonData);
                            }
                        }
                        catch (Exception exception)
                        {
                            Logger.Instance.Log.Error(exception);

                            _chromelyResponse =
                                new ChromelyResponse
                            {
                                Status = (int)HttpStatusCode.BadRequest,
                                Data   = "An error occured."
                            };
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });
            }

            #endregion

            #region Process Request Async

            void ProcessRequestAsync(string path)
            {
                Task.Run(async() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var response = new ChromelyResponse();
                            if (string.IsNullOrEmpty(path))
                            {
                                response.ReadyState = (int)ReadyState.ResponseIsReady;
                                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                                response.StatusText = "Bad Request";

                                _chromelyResponse = response;
                            }
                            else
                            {
                                var parameters = request.Url.GetParameters();
                                var postData   = GetPostData(request);

                                _chromelyResponse = await _requestTaskRunner.RunAsync(request.Method, path, parameters, postData);
                                string jsonData   = _chromelyResponse.Data.EnsureResponseDataIsJsonFormat();
                                _responseBytes    = Encoding.UTF8.GetBytes(jsonData);
                            }
                        }
                        catch (Exception exception)
                        {
                            Logger.Instance.Log.Error(exception);

                            _chromelyResponse =
                                new ChromelyResponse
                            {
                                Status = (int)HttpStatusCode.BadRequest,
                                Data   = "An error occured."
                            };
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });
            }

            #endregion
        }