From 5b914746e51f7cb8b16cbb5a672e2a09f69f43d3 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Mon, 20 Jun 2022 15:01:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=94=A8=E6=88=B7=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86=E5=87=BD=E6=95=B0=E7=9A=84=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/comp_gateroute.go | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/services/comp_gateroute.go b/services/comp_gateroute.go index 74701f3ec..e458c756b 100644 --- a/services/comp_gateroute.go +++ b/services/comp_gateroute.go @@ -119,7 +119,7 @@ func (this *SComp_GateRouteComp) RegisterRouteCheck(methodName string, comp refl //Rpc_GatewayRoute服务接口的接收函数 func (this *SComp_GateRouteComp) ReceiveMsg(ctx context.Context, args *pb.AgentMessage, reply *pb.RPCMessageReply) error { - defer func() { + defer func() { //程序异常 收集异常信息传递给前端显示 if r := recover(); r != nil { buf := make([]byte, 1024) l := runtime.Stack(buf, false) @@ -129,25 +129,30 @@ func (this *SComp_GateRouteComp) ReceiveMsg(ctx context.Context, args *pb.AgentM } }() log.Debugf("SComp_GateRouteComp ReceiveMsg agent:%s uId:%s MessageDistribution msg:%s", args.UserSessionId, args.UserId, args.Method) + //获取用户消息处理函数 this.mrlock.RLock() msghandle, ok := this.msghandles[args.Method] msgcheck := this.msgcheck[args.Method] this.mrlock.RUnlock() if ok { + //封装用户会话 session := comm.NewUserSession(this.service, args.Ip, args.UserSessionId, args.GatewayServiceId, args.UserId) + //序列化用户消息对象 msg := reflect.New(msghandle.msgType.Elem()).Interface() if err := ptypes.UnmarshalAny(args.Message, msg.(proto.Message)); err != nil { log.Errorf("UserMessage:%s Unmarshal err:%v", args.Method, err) return err } - returnValues := msgcheck.fn.Func.Call([]reflect.Value{msgcheck.rcvr, reflect.ValueOf(session), reflect.ValueOf(msg)}) - // The return value for the method is an error. - code := returnValues[1].Interface().(comm.ErrorCode) + + //调用校验接口 + checkreturn := msgcheck.fn.Func.Call([]reflect.Value{msgcheck.rcvr, reflect.ValueOf(session), reflect.ValueOf(msg)}) + //读取校验结果 有错误直接返回错误码给用户 + code := checkreturn[1].Interface().(comm.ErrorCode) if code.Code != pb.ErrorCode_Success { log.Errorf("HandleUserMsg:%s msg:%v code:%d", args.Method, msg, code) reply.Code = code.Code reply.Message = pb.GetErrorCodeMsg(code.Code) - if code.Data != nil { + if code.Data != nil { //处理错误附加数据 采用json 序列化为string if d, err := jsoniter.Marshal(code.Data); err != nil { log.Errorf("HandleUserMsg:%s msg:%v code:%d err:%v", args.Method, msg, code, err) return nil @@ -157,16 +162,18 @@ func (this *SComp_GateRouteComp) ReceiveMsg(ctx context.Context, args *pb.AgentM } return nil } - result := returnValues[0].Interface().(map[string]interface{}) - returnValues = msghandle.fn.Func.Call([]reflect.Value{msghandle.rcvr, reflect.ValueOf(session), reflect.ValueOf(result), reflect.ValueOf(msg)}) - errcode := pb.ErrorCode(returnValues[0].Int()) - if errcode != pb.ErrorCode_Success { + //校验结果成功 处理临时数据转移 + result := checkreturn[0].Interface().(map[string]interface{}) + //调用用户处理函数 + handlereturn := msghandle.fn.Func.Call([]reflect.Value{msghandle.rcvr, reflect.ValueOf(session), reflect.ValueOf(result), reflect.ValueOf(msg)}) + errcode := pb.ErrorCode(handlereturn[0].Int()) + if errcode != pb.ErrorCode_Success { //处理返货错误码 返回用户错误信息 log.Errorf("HandleUserMsg:%s msg:%v code:%d", args.Method, msg, code) reply.Code = errcode reply.Message = pb.GetErrorCodeMsg(errcode) return nil } - } else { + } else { //未找到消息处理函数 reply.Code = pb.ErrorCode_ReqParameterError } return nil