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