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(); }
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(); }
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}")); } } }