go_dreamfactory/comm/core.go

85 lines
2.4 KiB
Go

package comm
import (
"go_dreamfactory/pb"
"reflect"
"go_dreamfactory/lego/core"
"go_dreamfactory/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_UserModule core.M_Modules = "user" //用户模块
SM_PackModule core.M_Modules = "pack" //背包模块
SM_MailModule core.M_Modules = "mail" //邮件模块
SM_FriendModule core.M_Modules = "friend" //好友模块
)
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" //代理关闭 关闭用户连接
)
const (
Event_UserLogin core.Event_Key = "Event_UserLogin" //登录事件
)
type ISC_GateRouteComp interface {
core.IServiceComp
RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, fn reflect.Method)
}
type Imail interface {
CreateNewMail(uId string)
}
type IPack interface {
//GetRewaredItems(uId string, itmes map[uint32]uint32)
}
//用户会话
type IUserSession interface {
GetSessionId() string
GetUserId() string
GetIP() string
GetGatewayServiceId() string
IsLogin() bool
Build(uid string) (err error)
UnBuild(ServiceMethod string, msg proto.Message) (err error)
SendMsg(mainType, subType string, code pb.ErrorCode, msg proto.Message) (err error)
Close() (err error)
ToString() string
}
func ProtoDecode(msg *pb.UserMessage, req proto.Message) (ok bool) {
err := proto.Unmarshal(msg.Data, req)
if err != nil {
log.Errorf("%s.%s %v", msg.MainType, msg.SubType, 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.%s %v", msg.MainType, msg.SubType, err)
return
}
msg.Data = data
return true
}