public async Task ProcessAsync(JsonRpcContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } try { var request = context.Request; JsonRpcMethod method; if (!Methods.TryGetMethod(request.Method, out method)) { context.SetResponse(JsonRpcError.METHOD_NOT_FOUND); return; } for (var i = 0; i < Behaviors.Count; i++) { await Behaviors[i].BeforeInvoke(context); } await method.HandleAsync(context); for (var i = 0; i < Behaviors.Count; i++) { await Behaviors[i].AfterInvoke(context); } } catch (JsonRpcException ex) { // todo: log context.SetResponse(ex.JsonRpcCode, ex.JsonRpcMessage, data: ex.JsonRpcData); return; } catch (Exception ex) { // todo: log context.SetResponse(JsonRpcError.INTERNAL_ERROR, data: ex.ToString()); return; } }
public override Task HandleAsync(JsonRpcContext context) { var methods = context.Server.Methods .Select(m => m.Name) .ToArray(); context.SetResponse(methods); return(Task.WhenAll()); }
public override Task AfterInvoke(JsonRpcContext context) { var validationState = context.RequestServices.GetRequiredService <ValidationState>(); if (validationState.HasErrors) { context.SetResponse(JsonRpcError.INVALID_PARAMS, "Invalid arguments", new { Errors = validationState.Errors.ToDictionary(e => MakeCamelSnakePath(e.Key), e => e.Text) }); } return(base.AfterInvoke(context)); }
public override async Task InvokeAsync(JsonRpcContext context) { object service = null; if (!Method.IsStatic) { service = context.AppServices.GetRequiredService(Type); } var parameters = new object[Parameters.Count]; if (parameters.Length > 0) { await ReadParametersAsync(context, parameters); } // invoke the method var result = await Method.InvokeAsync(service, parameters); // return the result context.SetResponse(result); }