package comm import ( "go_dreamfactory/pb" "reflect" "github.com/liwei1dao/lego/core" "github.com/liwei1dao/lego/sys/log" "google.golang.org/protobuf/proto" ) const ( SC_ServiceGateRouteComp core.S_Comps = "SC_GateRouteComp" //s_comps.ISC_GateRouteComp ) const ( SM_GateModule core.M_Modules = "gateway" //gate模块 网关服务模块 SM_WebModule core.M_Modules = "web" //web模块 SM_LoginModule core.M_Modules = "login" //web模块 ) const ( //Rpc Rpc_GatewayRoute core.Rpc_Key = "Rpc_GatewayRoute" //网关路由 Rpc_GatewayAgentBuild core.Rpc_Key = "Rpc_GatewayAgentBuild" //代理绑定 绑定用户Id Rpc_GatewayAgentUnBuild core.Rpc_Key = "Rpc_GatewayAgentUnBuild" //代理解绑 解绑用户Id Rpc_GatewayAgentSendMsg core.Rpc_Key = "Rpc_GatewayAgentSendMsg" //代理发送消息 向用户发送消息 Rpc_GatewaySendBatchMsg core.Rpc_Key = "Rpc_GatewaySendBatchMsg" //向多个用户发送消息 Rpc_GatewaySendRadioMsg core.Rpc_Key = "Rpc_GatewaySendRadioMsg" //广播消息 Rpc_GatewayAgentClose core.Rpc_Key = "Rpc_GatewayAgentClose" //代理关闭 关闭用户连接 ) type ISC_GateRouteComp interface { core.IServiceComp RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, fn reflect.Method) } //用户会话 type IUserSession interface { GetSessionId() string GetUserId() uint32 GetIP() string GetGatewayServiceId() string Build(uid uint32) (err error) UnBuild(ServiceMethod string, msg proto.Message) (err error) SendMsg(ServiceMethod string, msg proto.Message) (err error) Close() (err error) ToString() string } //消息体 type MessageHead struct { ServiceMethod string //服务名 } //处理JSON消息 type Message struct { Head *MessageHead Data []byte } func ProtoDecode(msg *pb.UserMessage, req proto.Message) (ok bool) { err := proto.Unmarshal(msg.Data, req) if err != nil { log.Errorf("%s %v", msg.ServiceMethod, err) return } return true } func ProtoEncode(rsp proto.Message, msg *pb.UserMessage) (ok bool) { data, err := proto.Marshal(rsp) if err != nil { log.Errorf("%s %v", msg.ServiceMethod, err) return } msg.Data = data return true }