Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var requestAnalyzer = new RequestAnalyzer();
            var download        = new Download();
            var redirect        = new Redirect();

            var board = new SilkveilBoard(requestAnalyzer, download, redirect);

            using (var stream = new MemoryStream())
            {
                board.Start(stream);
            }

            Console.Read();
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            var requestAnalyzer = new RequestAnalyzer();
            var download = new Download();
            var redirect = new Redirect();

            var board = new SilkveilBoard(requestAnalyzer, download, redirect);

            using (var stream = new MemoryStream())
            {
                board.Start(stream);
            }

            Console.Read();
        }
Ejemplo n.º 3
0
        private void RequestHandler(object input)
        {
            var threadInfo     = input as ThreadInfo;
            var controllerType = _controllers[threadInfo.ControllerName];
            var controller     = CreateControllerInstance.Create(controllerType, _tinyDependencyInjection);
            var controllerInfo = threadInfo.Infos.FirstOrDefault(x => x.Name == threadInfo.ControllerName);

            if (controller == null || controllerInfo == null)
            {
                Console.WriteLine($"Weber Error: can't create controller object");
                return;
            }
            while (true)
            {
                var requestExist = threadInfo.Queue.Requests.Any();
                if (!requestExist && (DateTime.UtcNow > threadInfo.BornTime + TimeSpan.FromSeconds(WeberConstants.ThreadLifetime)))
                {
                    threadInfo.Threads.Remove(threadInfo.ControllerName);
                    break;
                }
                if (!requestExist)
                {
                    Thread.Sleep(10);
                    continue;
                }
                var context  = threadInfo.Queue.Requests.Dequeue();
                var request  = context.Request;
                var response = context.Response;
                var url      = UrlHelper.ClearAndNormalize(request.RawUrl);
                try
                {
                    // Handling
                    var requestType          = Enum.Parse <RequestType>(request.HttpMethod);
                    var bodyData             = RequestContentLoader.ReadAsByteArray(context.Request);
                    var controllerMethodInfo = MethodRouteHelper.MatchPath(request, threadInfo.ControllerName, _controllerInfos);
                    if (controllerMethodInfo == null)
                    {
                        ResultHelper.SendResult(response, new NotFoundResult("Route not found"));
                        return;
                    }
                    var parametersDataForMethod = RequestAnalyzer.GetParameterData(requestType, bodyData, url, controllerMethodInfo);
                    var taskFromMethod          = controllerMethodInfo.MethodInfo.Invoke(controller, parametersDataForMethod.ToArray()) as Task <IMethodResult>;
                    var result = taskFromMethod.Result;
                    response.StatusCode = (int)result.StatusCode();
                    var stream = response.OutputStream;
                    var serializationResult = ResponseSerializer.GetData(result);
                    if (serializationResult.IsOk)
                    {
                        stream.WriteAsync(serializationResult.Data);
                        stream.Close();
                    }
                    else
                    {
                        ResultHelper.SendResult(response, new InternalServerErrorResult("Result serialize error"));
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Internal Server Error: {e.Message}\n{e.StackTrace}");
                    ResultHelper.SendResult(response, new InternalServerErrorResult($": {e.Message}\n{e.StackTrace}"));
                }
            }
        }