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