コード例 #1
0
        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);
コード例 #2
0
        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.");
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
        }