public async Task <TResponse> ProcessRequest <TRequest, TResponse>(TRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } Type requestType = typeof(TRequest); if (!handlers.ContainsKey(requestType)) { throw new HandlerNotFoundException(); } if (request is IValidatableObject validatableRequest) { validatableRequest.Validate(); } Type requestHandlerType = handlers[requestType]; if (requestHandlerFactory.Create(requestHandlerType) is IRequestHandlerWithResponse <TRequest, TResponse> requestHandlerWithResponse) { return(await requestHandlerWithResponse.Handle(request)); } else if (requestHandlerFactory.Create(requestHandlerType) is IRequestHandlerWithoutResponse <TRequest> requestHandlerWithoutResponse) { await requestHandlerWithoutResponse.Handle(request); return(default);
public object ProcessRequest(byte[] requestBytes, IPAddress address, WebSocket socket) { var requestAsString = _toStringConverter.Convert(requestBytes); try { var json = JObject.Parse(requestAsString); var type = json["type"].ToString(); var payload = json["payload"].ToString(); switch (type) { case "clientOffer": var clientOfferRequest = new ClientOfferRequest(address, socket, payload); var clientOfferRequestHandler = _handlersFactory.Create(clientOfferRequest, clientOfferRequest.GetResponseType()); return(clientOfferRequestHandler.Handle(clientOfferRequest)); case "serverOffer": var serverRequest = new ServerOfferRequest(address, socket, payload); var serverRequestHandler = _handlersFactory.Create(serverRequest, serverRequest.GetResponseType()); return(serverRequestHandler.Handle(serverRequest)); case "answer": var answerRequest = new AnswerRequest(address, socket, payload); var answerRequestHandler = _handlersFactory.Create(answerRequest, answerRequest.GetResponseType()); return(answerRequestHandler.Handle(answerRequest)); case "new-ice": var newICERequest = new NewICEAvailableRequest(address, socket, payload); var newICERequestHandler = _handlersFactory.Create(newICERequest, newICERequest.GetResponseType()); return(newICERequestHandler.Handle(newICERequest)); case "txt": default: var txtRequest = new TxtRequest(address, socket, payload); var txtRequestHandler = _handlersFactory.Create(txtRequest, txtRequest.GetResponseType()); return(txtRequestHandler.Handle(txtRequest)); } } catch (System.Exception ex) { return($@"An error {ex} occured."); } }
public TResp Process <TReq, TResp>(TReq req) where TResp : Resp, new() where TReq : Req, new() { var name = typeof(TReq).Name; if (name.Length > 3) { name = name.Substring(0, name.Length - 3); } TResp response; try { RequestHandler <TReq, TResp> requestHandler = null; try { requestHandler = _requestHandlerFactory.Create <TReq, TResp>(); } catch (Exception exc) { var message = $"Could not create a request handler for {typeof(TReq).FullName}/{typeof(TResp).FullName}. Please register the request handler in the IoC container."; throw new Exception(message, exc); } response = requestHandler.Process(req); } catch (Exception exc) { //Create a default exception error response response = _responseFactory.GetExceptionErrorResp <TResp>(exc, exc.Message); } return(response); }
public TResponse ProcessRequest <TRequest, TResponse>(TRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } Type requestType = typeof(TRequest); if (!handlers.ContainsKey(requestType)) { throw new Exception("No handler is registered for the specified request."); } Type requestHandlerType = handlers[requestType]; IRequestHandler <TRequest, TResponse> requestHandler = (IRequestHandler <TRequest, TResponse>)requestHandlerFactory.Create(requestHandlerType); return(requestHandler.Handle(request)); }