public override object InvokeResult(object rq, Func <Type, object> objectCtor) { var request = rq as RequestJsonMessage; var response = new ResponseJsonMessage(); try { var msgBase = new Core.Remoting.MessageBase() { Args = request.Args, Method = request.Method, Service = request.Service, Token = request.Token, ApiPrefix = request.ApiPrefix }; var errorInfo = InvokeMessage(msgBase, out object result, out Dictionary <int, object> outs, out string token, objectCtor); if (errorInfo != null) { return(ResponseJsonMessage.CreateError(errorInfo.msg, errorInfo.code)); } response.SetData(result); response.Success = true; response.Outs = outs; if (!string.IsNullOrEmpty(token))//登录方法后返回新TOKEN { response.Token = token; } } catch (Exception ex) { response.Success = false; response.Msg = ex.Message; Console.WriteLine(ex.ToString()); CRL.Core.EventLog.Log(ex.ToString(), request.Service); return(ResponseJsonMessage.CreateError(ex.Message + $" 在{request.Service}/{request.Method}", "500")); } return(response); }
public object InvokeResult2(IChannelHandlerContext ctx, object rq, Func <Type, object> getArgs = null) { var request = rq as RequestJsonMessage; var response = new ResponseJsonMessage(); try { var msgBase = new Core.Remoting.MessageBase() { Args = request.Args, Method = request.Method, Service = request.Service, Token = request.Token }; var errorInfo = InvokeMessage(msgBase, out object result, out Dictionary <int, object> outs, out string token, getArgs); if (errorInfo != null) { return(ResponseJsonMessage.CreateError(errorInfo.msg, errorInfo.code)); } response.SetData(result); response.Success = true; response.Outs = outs; if (!string.IsNullOrEmpty(token))//登录方法后返回新TOKEN { response.Token = token; var arry = response.Token.Split('@'); AddClient(ctx, arry[0]); } } catch (Exception ex) { response.Success = false; response.Msg = ex.Message; Console.WriteLine(ex.ToString()); CRL.Core.EventLog.Log(ex.ToString(), request.Service); return(ResponseJsonMessage.CreateError(ex.Message + $" 在{request.Service}/{request.Method}", "500")); } return(response); }
public override object InvokeResult(object rq, Func <Type, object> objectCtor = null) { var request = rq as RequestMessage; var response = new ResponseMessage(); try { var a = serviceHandle.TryGetValue(request.Service, out serviceInfo serviceInfo); if (!a) { return(ResponseMessage.CreateError("未找到该服务", "404")); } var methodInfo = serviceInfo.GetMethod(request.Method); if (methodInfo == null) { return(ResponseMessage.CreateError("未找到该方法" + request.Method, "404")); } var method = methodInfo.MethodInfo; var paramters = request.Args; var methodParamters = methodInfo.Parameters; var args = new object[methodParamters.Length]; for (int i = 0; i < methodParamters.Length; i++) { var p = methodParamters[i]; var value = paramters[i]; int offSet = 0; args[i] = Core.BinaryFormat.FieldFormat.UnPack(p.ParameterType, value, ref offSet); } var msgBase = new Core.Remoting.MessageBase() { Args = args.ToList(), Method = request.Method, Service = request.Service, Token = request.Token }; var errorInfo = InvokeMessage(msgBase, out object result, out Dictionary <int, object> outs2, out string token, objectCtor); if (errorInfo != null) { return(ResponseMessage.CreateError(errorInfo.msg, errorInfo.code)); } var generType = method.ReturnType; if (methodInfo.IsAsync) { generType = method.ReturnType.GenericTypeArguments[0]; } response.SetData(generType, result); response.Success = true; var outs = new Dictionary <int, byte[]>(); foreach (var kv in outs2) { var type = methodParamters[kv.Key]; var value = kv.Value; outs[kv.Key] = Core.BinaryFormat.FieldFormat.Pack(type.ParameterType, value); } response.Outs = outs; if (!string.IsNullOrEmpty(token))//登录方法后返回新TOKEN { response.Token = token; } } catch (Exception ex) { response.Success = false; response.Msg = ex.Message; Console.WriteLine(ex.ToString()); return(ResponseMessage.CreateError(ex.Message + $" 在{request.Service}/{request.Method}", "500")); } return(response); }