补充代码注释
This commit is contained in:
parent
de4b3e54ff
commit
0a9e855257
@ -11,6 +11,10 @@ import (
|
|||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
用户会话对象 跨服操作用户的对象
|
||||||
|
*/
|
||||||
|
|
||||||
func NewUserSession(service base.IRPCXService, ip, sessionId, gatewayServiceId string, uid string) IUserSession {
|
func NewUserSession(service base.IRPCXService, ip, sessionId, gatewayServiceId string, uid string) IUserSession {
|
||||||
return &UserSession{
|
return &UserSession{
|
||||||
IP: ip,
|
IP: ip,
|
||||||
@ -29,24 +33,32 @@ type UserSession struct {
|
|||||||
service base.IRPCXService
|
service base.IRPCXService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取用户的会话id
|
||||||
func (this *UserSession) GetSessionId() string {
|
func (this *UserSession) GetSessionId() string {
|
||||||
return this.SessionId
|
return this.SessionId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取用户的uid
|
||||||
func (this *UserSession) GetUserId() string {
|
func (this *UserSession) GetUserId() string {
|
||||||
return this.UserId
|
return this.UserId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取用户的远程ip地址
|
||||||
func (this *UserSession) GetIP() string {
|
func (this *UserSession) GetIP() string {
|
||||||
return this.IP
|
return this.IP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//用户当先所在网关服务
|
||||||
func (this *UserSession) GetGatewayServiceId() string {
|
func (this *UserSession) GetGatewayServiceId() string {
|
||||||
return this.GatewayServiceId
|
return this.GatewayServiceId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//是否登录
|
||||||
func (this *UserSession) IsLogin() bool {
|
func (this *UserSession) IsLogin() bool {
|
||||||
return this.UserId != ""
|
return this.UserId != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//绑定uid 登录后操作
|
||||||
func (this *UserSession) Build(uid string) (err error) {
|
func (this *UserSession) Build(uid string) (err error) {
|
||||||
reply := &pb.RPCMessageReply{}
|
reply := &pb.RPCMessageReply{}
|
||||||
if err := this.service.RpcCallById(this.GatewayServiceId, string(Rpc_GatewayAgentBuild), context.Background(), &pb.AgentBuildReq{
|
if err := this.service.RpcCallById(this.GatewayServiceId, string(Rpc_GatewayAgentBuild), context.Background(), &pb.AgentBuildReq{
|
||||||
@ -58,6 +70,7 @@ func (this *UserSession) Build(uid string) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//解绑uid 注销和切换账号是处理
|
||||||
func (this *UserSession) UnBuild(ServiceMethod string, msg proto.Message) (err error) {
|
func (this *UserSession) UnBuild(ServiceMethod string, msg proto.Message) (err error) {
|
||||||
reply := &pb.RPCMessageReply{}
|
reply := &pb.RPCMessageReply{}
|
||||||
if err := this.service.RpcCallById(this.GatewayServiceId, string(Rpc_GatewayAgentUnBuild), context.Background(), &pb.AgentUnBuildReq{
|
if err := this.service.RpcCallById(this.GatewayServiceId, string(Rpc_GatewayAgentUnBuild), context.Background(), &pb.AgentUnBuildReq{
|
||||||
@ -68,6 +81,7 @@ func (this *UserSession) UnBuild(ServiceMethod string, msg proto.Message) (err e
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//向用户发送消息
|
||||||
func (this *UserSession) SendMsg(mainType, subType string, code pb.ErrorCode, msg proto.Message) (err error) {
|
func (this *UserSession) SendMsg(mainType, subType string, code pb.ErrorCode, msg proto.Message) (err error) {
|
||||||
reply := &pb.RPCMessageReply{}
|
reply := &pb.RPCMessageReply{}
|
||||||
data, _ := proto.Marshal(msg)
|
data, _ := proto.Marshal(msg)
|
||||||
@ -83,6 +97,8 @@ func (this *UserSession) SendMsg(mainType, subType string, code pb.ErrorCode, ms
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//关闭用户连接对象
|
||||||
func (this *UserSession) Close() (err error) {
|
func (this *UserSession) Close() (err error) {
|
||||||
reply := &pb.RPCMessageReply{}
|
reply := &pb.RPCMessageReply{}
|
||||||
if err := this.service.RpcCallById(this.GatewayServiceId, string(Rpc_GatewayAgentSendMsg), context.Background(), &pb.AgentCloseeReq{
|
if err := this.service.RpcCallById(this.GatewayServiceId, string(Rpc_GatewayAgentSendMsg), context.Background(), &pb.AgentCloseeReq{
|
||||||
@ -93,6 +109,7 @@ func (this *UserSession) Close() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//打印日志需要
|
||||||
func (this *UserSession) ToString() string {
|
func (this *UserSession) ToString() string {
|
||||||
return fmt.Sprintf("SessionId:%s UserId:%s GatewayServiceId:%s", this.SessionId, this.UserId, this.GatewayServiceId)
|
return fmt.Sprintf("SessionId:%s UserId:%s GatewayServiceId:%s", this.SessionId, this.UserId, this.GatewayServiceId)
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,19 @@
|
|||||||
package modules
|
package modules
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/pb"
|
|
||||||
|
|
||||||
"go_dreamfactory/lego/core"
|
"go_dreamfactory/lego/core"
|
||||||
|
"go_dreamfactory/pb"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
//业务模块基类接口 定义所有业务模块都可以使用的接口
|
||||||
IModule interface {
|
IModule interface {
|
||||||
core.IModule
|
core.IModule
|
||||||
|
///向指定用户发送消息
|
||||||
SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error)
|
SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error)
|
||||||
|
///向多个用户发送消息
|
||||||
SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error)
|
SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -14,6 +14,10 @@ import (
|
|||||||
"go_dreamfactory/lego/core/cbase"
|
"go_dreamfactory/lego/core/cbase"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
模块网关组件的基类实现 模块接收用户的消息请求都需要通过装备继承此组件的api组件来实现
|
||||||
|
*/
|
||||||
|
|
||||||
var typeOfContext = reflect.TypeOf((*context.Context)(nil)).Elem()
|
var typeOfContext = reflect.TypeOf((*context.Context)(nil)).Elem()
|
||||||
var typeOfSession = reflect.TypeOf((*comm.IUserSession)(nil)).Elem()
|
var typeOfSession = reflect.TypeOf((*comm.IUserSession)(nil)).Elem()
|
||||||
var typeOfError = reflect.TypeOf((*error)(nil)).Elem()
|
var typeOfError = reflect.TypeOf((*error)(nil)).Elem()
|
||||||
@ -23,20 +27,21 @@ var typeOfError = reflect.TypeOf((*error)(nil)).Elem()
|
|||||||
*/
|
*/
|
||||||
type MComp_GateComp struct {
|
type MComp_GateComp struct {
|
||||||
cbase.ModuleCompBase
|
cbase.ModuleCompBase
|
||||||
service base.IRPCXService
|
service base.IRPCXService //rpc服务对象
|
||||||
module core.IModule
|
module core.IModule //当前业务模块
|
||||||
comp core.IModuleComp
|
comp core.IModuleComp //网关组件自己
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件初始化接口
|
||||||
func (this *MComp_GateComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
func (this *MComp_GateComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
this.ModuleCompBase.Init(service, module, comp, options)
|
this.ModuleCompBase.Init(service, module, comp, options)
|
||||||
this.service = service.(base.IRPCXService)
|
this.service = service.(base.IRPCXService)
|
||||||
this.module = module
|
this.module = module
|
||||||
this.comp = comp
|
this.comp = comp
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件启动接口,启动时将自己接收用户消息的处理函数注册到services/comp_gateroute.go 对象中
|
||||||
func (this *MComp_GateComp) Start() (err error) {
|
func (this *MComp_GateComp) Start() (err error) {
|
||||||
if err = this.ModuleCompBase.Start(); err != nil {
|
if err = this.ModuleCompBase.Start(); err != nil {
|
||||||
return
|
return
|
||||||
@ -50,6 +55,7 @@ func (this *MComp_GateComp) Start() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//反射注册相关接口道services/comp_gateroute.go 对象中
|
||||||
func (this *MComp_GateComp) suitableMethods(scomp comm.ISC_GateRouteComp, typ reflect.Type) {
|
func (this *MComp_GateComp) suitableMethods(scomp comm.ISC_GateRouteComp, typ reflect.Type) {
|
||||||
for m := 0; m < typ.NumMethod(); m++ {
|
for m := 0; m < typ.NumMethod(); m++ {
|
||||||
method := typ.Method(m)
|
method := typ.Method(m)
|
||||||
|
@ -15,6 +15,11 @@ import (
|
|||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
用户代理对象
|
||||||
|
封装用户socket 对象 处理用户的消息读取 写入 关闭等操作
|
||||||
|
*/
|
||||||
|
|
||||||
func newAgent(gateway IGateway, conn *websocket.Conn) *Agent {
|
func newAgent(gateway IGateway, conn *websocket.Conn) *Agent {
|
||||||
agent := &Agent{
|
agent := &Agent{
|
||||||
gateway: gateway,
|
gateway: gateway,
|
||||||
|
@ -9,6 +9,9 @@ import (
|
|||||||
"go_dreamfactory/lego/core/cbase"
|
"go_dreamfactory/lego/core/cbase"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
用户代理对象管理组件
|
||||||
|
*/
|
||||||
type AgentMgr_Comp struct {
|
type AgentMgr_Comp struct {
|
||||||
cbase.ModuleCompBase
|
cbase.ModuleCompBase
|
||||||
agents *sync.Map
|
agents *sync.Map
|
||||||
@ -19,9 +22,13 @@ func (this *AgentMgr_Comp) Init(service core.IService, module core.IModule, comp
|
|||||||
this.agents = new(sync.Map)
|
this.agents = new(sync.Map)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//加入新的用户
|
||||||
func (this *AgentMgr_Comp) Connect(a IAgent) {
|
func (this *AgentMgr_Comp) Connect(a IAgent) {
|
||||||
this.agents.Store(a.SessionId(), a)
|
this.agents.Store(a.SessionId(), a)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//移除断开的用户
|
||||||
func (this *AgentMgr_Comp) DisConnect(a IAgent) {
|
func (this *AgentMgr_Comp) DisConnect(a IAgent) {
|
||||||
this.agents.Delete(a.SessionId())
|
this.agents.Delete(a.SessionId())
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
//用户代理对象接口定义
|
||||||
IAgent interface {
|
IAgent interface {
|
||||||
SessionId() string
|
SessionId() string
|
||||||
IP() string
|
IP() string
|
||||||
@ -17,6 +18,7 @@ type (
|
|||||||
WriteMsg(msg *pb.UserMessage) (err error)
|
WriteMsg(msg *pb.UserMessage) (err error)
|
||||||
Close() //主动关闭接口
|
Close() //主动关闭接口
|
||||||
}
|
}
|
||||||
|
//网关模块 接口定义
|
||||||
IGateway interface {
|
IGateway interface {
|
||||||
core.IModule
|
core.IModule
|
||||||
Service() base.IRPCXService
|
Service() base.IRPCXService
|
||||||
|
@ -9,6 +9,11 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
模块名:gateway
|
||||||
|
描述:提供客户端网关路由服务 管理用户socket对象 以及分发用户消息
|
||||||
|
开发:李伟
|
||||||
|
*/
|
||||||
func NewModule() core.IModule {
|
func NewModule() core.IModule {
|
||||||
m := new(Gateway)
|
m := new(Gateway)
|
||||||
return m
|
return m
|
||||||
@ -17,39 +22,51 @@ func NewModule() core.IModule {
|
|||||||
type Gateway struct {
|
type Gateway struct {
|
||||||
modules.ModuleBase
|
modules.ModuleBase
|
||||||
service base.IRPCXService
|
service base.IRPCXService
|
||||||
wsservice_comp *WSService_Comp
|
wsservice_comp *WSService_Comp //websocket 服务组件 提供websocket服务监听
|
||||||
agentmgr_comp *AgentMgr_Comp
|
agentmgr_comp *AgentMgr_Comp //用户代理对象管理组件 管理用户socekt对象
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块名
|
||||||
func (this *Gateway) GetType() core.M_Modules {
|
func (this *Gateway) GetType() core.M_Modules {
|
||||||
return comm.SM_GateModule
|
return comm.SM_GateModule
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块自定义参数
|
||||||
func (this *Gateway) NewOptions() (options core.IModuleOptions) {
|
func (this *Gateway) NewOptions() (options core.IModuleOptions) {
|
||||||
return new(Options)
|
return new(Options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//提供服务对象获取接口
|
||||||
func (this *Gateway) Service() base.IRPCXService {
|
func (this *Gateway) Service() base.IRPCXService {
|
||||||
return this.service
|
return this.service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块初始化函数
|
||||||
func (this *Gateway) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
func (this *Gateway) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
||||||
err = this.ModuleBase.Init(service, module, options)
|
err = this.ModuleBase.Init(service, module, options)
|
||||||
this.service = service.(base.IRPCXService)
|
this.service = service.(base.IRPCXService)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块启动函数 注册rpc服务接口提供用户相关的rpc接口服务
|
||||||
func (this *Gateway) Start() (err error) {
|
func (this *Gateway) Start() (err error) {
|
||||||
|
//注册用户绑定uid接口 登录成功后触发
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentBuild), this.agentmgr_comp.Build)
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentBuild), this.agentmgr_comp.Build)
|
||||||
|
//注册用户解绑uid接口 登出或则切换账号是触发
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentUnBuild), this.agentmgr_comp.UnBuild)
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentUnBuild), this.agentmgr_comp.UnBuild)
|
||||||
|
//向用户发送消息接口
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentSendMsg), this.agentmgr_comp.SendMsgToAgent)
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentSendMsg), this.agentmgr_comp.SendMsgToAgent)
|
||||||
|
//向多个用户对象发送消息接口
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewaySendBatchMsg), this.agentmgr_comp.SendMsgToAgents)
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewaySendBatchMsg), this.agentmgr_comp.SendMsgToAgents)
|
||||||
|
//向所有用户发送消息接口
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewaySendRadioMsg), this.agentmgr_comp.SendMsgToAllAgent)
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewaySendRadioMsg), this.agentmgr_comp.SendMsgToAllAgent)
|
||||||
|
//关闭用户socket连接接口
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentClose), this.agentmgr_comp.CloseAgent)
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentClose), this.agentmgr_comp.CloseAgent)
|
||||||
err = this.ModuleBase.Start()
|
err = this.ModuleBase.Start()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//装备组件
|
||||||
func (this *Gateway) OnInstallComp() {
|
func (this *Gateway) OnInstallComp() {
|
||||||
this.ModuleBase.OnInstallComp()
|
this.ModuleBase.OnInstallComp()
|
||||||
this.agentmgr_comp = this.RegisterComp(new(AgentMgr_Comp)).(*AgentMgr_Comp)
|
this.agentmgr_comp = this.RegisterComp(new(AgentMgr_Comp)).(*AgentMgr_Comp)
|
||||||
@ -62,7 +79,7 @@ func (this *Gateway) Connect(a IAgent) {
|
|||||||
this.agentmgr_comp.Connect(a)
|
this.agentmgr_comp.Connect(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
//有新的连接对象进入
|
//有用户断开连接
|
||||||
func (this *Gateway) DisConnect(a IAgent) {
|
func (this *Gateway) DisConnect(a IAgent) {
|
||||||
log.Debugf("[Module.Gateway] have disConnect:Ip[%s] SessionId:[%s] uid:[%s]", a.IP(), a.SessionId(), a.UserId())
|
log.Debugf("[Module.Gateway] have disConnect:Ip[%s] SessionId:[%s] uid:[%s]", a.IP(), a.SessionId(), a.UserId())
|
||||||
this.agentmgr_comp.DisConnect(a)
|
this.agentmgr_comp.DisConnect(a)
|
||||||
|
@ -4,12 +4,17 @@ import (
|
|||||||
"go_dreamfactory/lego/utils/mapstructure"
|
"go_dreamfactory/lego/utils/mapstructure"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
网关模块 参数定义
|
||||||
|
*/
|
||||||
|
|
||||||
type (
|
type (
|
||||||
Options struct {
|
Options struct {
|
||||||
ListenPort int
|
ListenPort int //websocket 监听端口
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//序列化参数对象
|
||||||
func (this *Options) LoadConfig(settings map[string]interface{}) (err error) {
|
func (this *Options) LoadConfig(settings map[string]interface{}) (err error) {
|
||||||
if settings != nil {
|
if settings != nil {
|
||||||
err = mapstructure.Decode(settings, this)
|
err = mapstructure.Decode(settings, this)
|
||||||
|
@ -13,17 +13,22 @@ import (
|
|||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
基础业务模块实现 封装一些通用的接口提供给业务模块使用
|
||||||
|
*/
|
||||||
type ModuleBase struct {
|
type ModuleBase struct {
|
||||||
cbase.ModuleBase
|
cbase.ModuleBase
|
||||||
service base.IRPCXService
|
service base.IRPCXService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块初始化接口
|
||||||
func (this *ModuleBase) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
func (this *ModuleBase) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
||||||
err = this.ModuleBase.Init(service, module, options)
|
err = this.ModuleBase.Init(service, module, options)
|
||||||
this.service = service.(base.IRPCXService)
|
this.service = service.(base.IRPCXService)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//向指定用户发送消息
|
||||||
func (this *ModuleBase) SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error) {
|
func (this *ModuleBase) SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error) {
|
||||||
reply := &pb.RPCMessageReply{}
|
reply := &pb.RPCMessageReply{}
|
||||||
data, _ := proto.Marshal(msg)
|
data, _ := proto.Marshal(msg)
|
||||||
@ -38,6 +43,7 @@ func (this *ModuleBase) SendMsgToUser(mainType, subType string, msg proto.Messag
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//向多个用户发送消息
|
||||||
func (this *ModuleBase) SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error) {
|
func (this *ModuleBase) SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error) {
|
||||||
var (
|
var (
|
||||||
gateways map[string][]string = make(map[string][]string)
|
gateways map[string][]string = make(map[string][]string)
|
||||||
|
@ -11,22 +11,22 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const ( //消息回复的头名称
|
||||||
QueryUserPackReq = "pack.queryuserpackreq"
|
QueryUserPackResp = "queryuserpackresp"
|
||||||
QueryUserPackResp = "pack.queryuserpackresp"
|
UseItemResp = "useitemresp"
|
||||||
UseItemReq = "pack.useitemreq"
|
SellItemResp = "sellitemresp"
|
||||||
UseItemResp = "pack.useitemresp"
|
|
||||||
SellItemReq = "pack.sellitemreq"
|
|
||||||
SellItemResp = "pack.sellitemresp"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
背包 处理用户的请求组件 必须继承 modules.MComp_GateComp
|
||||||
|
*/
|
||||||
type Api_Comp struct {
|
type Api_Comp struct {
|
||||||
modules.MComp_GateComp
|
modules.MComp_GateComp
|
||||||
service core.IService
|
service core.IService
|
||||||
module *Pack
|
module *Pack
|
||||||
mail comm.Imail
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件初始化接口
|
||||||
func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
this.MComp_GateComp.Init(service, module, comp, options)
|
this.MComp_GateComp.Init(service, module, comp, options)
|
||||||
this.service = service
|
this.service = service
|
||||||
@ -34,17 +34,6 @@ func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Api_Comp) Start() (err error) {
|
|
||||||
err = this.MComp_GateComp.Start()
|
|
||||||
var module core.IModule
|
|
||||||
if module, err = this.service.GetModule(comm.SM_MailModule); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.mail = module.(comm.Imail)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
///查询用户背包数据
|
///查询用户背包数据
|
||||||
func (this *Api_Comp) QueryUserPackReq(ctx context.Context, session comm.IUserSession, req *pb.QueryUserPackReq) (err error) {
|
func (this *Api_Comp) QueryUserPackReq(ctx context.Context, session comm.IUserSession, req *pb.QueryUserPackReq) (err error) {
|
||||||
var (
|
var (
|
||||||
|
@ -20,6 +20,7 @@ type Configure_Comp struct {
|
|||||||
cbase.ModuleCompBase
|
cbase.ModuleCompBase
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件初始化接口
|
||||||
func (this *Configure_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
func (this *Configure_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
this.ModuleCompBase.Init(service, module, comp, options)
|
this.ModuleCompBase.Init(service, module, comp, options)
|
||||||
configure.RegisterConfigure(game_item, cfg.NewGame_item)
|
configure.RegisterConfigure(game_item, cfg.NewGame_item)
|
||||||
|
@ -22,20 +22,23 @@ func NewModule() core.IModule {
|
|||||||
|
|
||||||
type Pack struct {
|
type Pack struct {
|
||||||
modules.ModuleBase
|
modules.ModuleBase
|
||||||
api_comp *Api_Comp
|
api_comp *Api_Comp //背包模块 协议处理组件
|
||||||
configure_comp *Configure_Comp
|
configure_comp *Configure_Comp //背包模块 配置相关接口封装组件
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块名称
|
||||||
func (this *Pack) GetType() core.M_Modules {
|
func (this *Pack) GetType() core.M_Modules {
|
||||||
return comm.SM_PackModule
|
return comm.SM_PackModule
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块初始化接口 注册用户创建角色事件
|
||||||
func (this *Pack) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
func (this *Pack) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
||||||
err = this.ModuleBase.Init(service, module, options)
|
err = this.ModuleBase.Init(service, module, options)
|
||||||
event.RegisterGO(comm.Event_CreateUser, this.event_CreateUser)
|
event.RegisterGO(comm.Event_CreateUser, this.event_CreateUser)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//装备组件
|
||||||
func (this *Pack) OnInstallComp() {
|
func (this *Pack) OnInstallComp() {
|
||||||
this.ModuleBase.OnInstallComp()
|
this.ModuleBase.OnInstallComp()
|
||||||
this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp)
|
this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp)
|
||||||
|
@ -12,13 +12,17 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
web api 服务组件
|
||||||
|
*/
|
||||||
type Api_Comp struct {
|
type Api_Comp struct {
|
||||||
cbase.ModuleCompBase
|
cbase.ModuleCompBase
|
||||||
options *Options
|
options *Options //模块参数
|
||||||
module *Web
|
module *Web //当前模块对象
|
||||||
gin gin.ISys
|
gin gin.ISys //gin 框架 web的热门框架
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件初始化接口 启动web服务 并注册api
|
||||||
func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
||||||
err = this.ModuleCompBase.Init(service, module, comp, options)
|
err = this.ModuleCompBase.Init(service, module, comp, options)
|
||||||
this.options = options.(*Options)
|
this.options = options.(*Options)
|
||||||
|
@ -3,11 +3,15 @@ package web
|
|||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
"go_dreamfactory/modules"
|
"go_dreamfactory/modules"
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
|
|
||||||
"go_dreamfactory/lego/core"
|
"go_dreamfactory/lego/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
模块名:web
|
||||||
|
描述:为服务集群提供一些http服务接口 方便测试和后期运维实现
|
||||||
|
开发:李伟
|
||||||
|
*/
|
||||||
func NewModule() core.IModule {
|
func NewModule() core.IModule {
|
||||||
m := new(Web)
|
m := new(Web)
|
||||||
return m
|
return m
|
||||||
@ -16,14 +20,15 @@ func NewModule() core.IModule {
|
|||||||
type Web struct {
|
type Web struct {
|
||||||
modules.ModuleBase
|
modules.ModuleBase
|
||||||
options *Options
|
options *Options
|
||||||
table *cfg.TbItem
|
api_comp *Api_Comp //提供weba pi服务的组件
|
||||||
api_comp *Api_Comp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块名
|
||||||
func (this *Web) GetType() core.M_Modules {
|
func (this *Web) GetType() core.M_Modules {
|
||||||
return comm.SM_WebModule
|
return comm.SM_WebModule
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//模块自定义参数
|
||||||
func (this *Web) NewOptions() (options core.IModuleOptions) {
|
func (this *Web) NewOptions() (options core.IModuleOptions) {
|
||||||
return new(Options)
|
return new(Options)
|
||||||
}
|
}
|
||||||
@ -34,21 +39,6 @@ func (this *Web) Init(service core.IService, module core.IModule, options core.I
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Web) Start() (err error) {
|
|
||||||
err = this.ModuleBase.Start()
|
|
||||||
// var (
|
|
||||||
// data interface{}
|
|
||||||
// )
|
|
||||||
// if err = configure.RegisterConfigure("tbitem.json", cfg.NewTbItem); err != nil {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// if data, err = configure.GetConfigure("tbitem.json"); err != nil {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// this.table = data.(*cfg.TbItem)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Web) OnInstallComp() {
|
func (this *Web) OnInstallComp() {
|
||||||
this.ModuleBase.OnInstallComp()
|
this.ModuleBase.OnInstallComp()
|
||||||
this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp)
|
this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp)
|
||||||
|
@ -15,28 +15,36 @@ import (
|
|||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
服务网关组件 用于接收网关服务发送过来的消息
|
||||||
|
*/
|
||||||
|
|
||||||
func NewGateRouteComp() comm.ISC_GateRouteComp {
|
func NewGateRouteComp() comm.ISC_GateRouteComp {
|
||||||
comp := new(SComp_GateRouteComp)
|
comp := new(SComp_GateRouteComp)
|
||||||
return comp
|
return comp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//用户协议处理函数注册的反射对象
|
||||||
type msghandle struct {
|
type msghandle struct {
|
||||||
rcvr reflect.Value
|
rcvr reflect.Value
|
||||||
msgType reflect.Type
|
msgType reflect.Type
|
||||||
fn reflect.Method
|
fn reflect.Method
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//服务网关组件
|
||||||
type SComp_GateRouteComp struct {
|
type SComp_GateRouteComp struct {
|
||||||
cbase.ServiceCompBase
|
cbase.ServiceCompBase
|
||||||
service base.IRPCXService
|
service base.IRPCXService //rpc服务对象 通过这个对象可以发布服务和调用其他服务的接口
|
||||||
mrlock sync.RWMutex
|
mrlock sync.RWMutex //msghandles 对象的锁
|
||||||
msghandles map[string]*msghandle
|
msghandles map[string]*msghandle //处理函数的管理对象
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//设置服务组件名称 方便业务模块中获取此组件对象
|
||||||
func (this *SComp_GateRouteComp) GetName() core.S_Comps {
|
func (this *SComp_GateRouteComp) GetName() core.S_Comps {
|
||||||
return comm.SC_ServiceGateRouteComp
|
return comm.SC_ServiceGateRouteComp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件初始化函数
|
||||||
func (this *SComp_GateRouteComp) Init(service core.IService, comp core.IServiceComp, options core.ICompOptions) (err error) {
|
func (this *SComp_GateRouteComp) Init(service core.IService, comp core.IServiceComp, options core.ICompOptions) (err error) {
|
||||||
err = this.ServiceCompBase.Init(service, comp, options)
|
err = this.ServiceCompBase.Init(service, comp, options)
|
||||||
this.service = service.(base.IRPCXService)
|
this.service = service.(base.IRPCXService)
|
||||||
@ -44,13 +52,14 @@ func (this *SComp_GateRouteComp) Init(service core.IService, comp core.IServiceC
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//组件启动时注册rpc服务监听
|
||||||
func (this *SComp_GateRouteComp) Start() (err error) {
|
func (this *SComp_GateRouteComp) Start() (err error) {
|
||||||
this.service.RegisterFunctionName(string(comm.Rpc_GatewayRoute), this.ReceiveMsg) //注册网关路由接收接口
|
this.service.RegisterFunctionName(string(comm.Rpc_GatewayRoute), this.ReceiveMsg) //注册网关路由接收接口
|
||||||
err = this.ServiceCompBase.Start()
|
err = this.ServiceCompBase.Start()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//注册路由
|
//业务模块注册用户消息处理路由
|
||||||
func (this *SComp_GateRouteComp) RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, fn reflect.Method) {
|
func (this *SComp_GateRouteComp) RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, fn reflect.Method) {
|
||||||
log.Debugf("注册用户路由【%s】", methodName)
|
log.Debugf("注册用户路由【%s】", methodName)
|
||||||
this.mrlock.RLock()
|
this.mrlock.RLock()
|
||||||
@ -69,6 +78,7 @@ func (this *SComp_GateRouteComp) RegisterRoute(methodName string, comp reflect.V
|
|||||||
this.mrlock.Unlock()
|
this.mrlock.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Rpc_GatewayRoute服务接口的接收函数
|
||||||
func (this *SComp_GateRouteComp) ReceiveMsg(ctx context.Context, args *pb.AgentMessage, reply *pb.RPCMessageReply) error {
|
func (this *SComp_GateRouteComp) ReceiveMsg(ctx context.Context, args *pb.AgentMessage, reply *pb.RPCMessageReply) error {
|
||||||
log.Debugf("SComp_GateRouteComp ReceiveMsg agent:%s uId:%s MessageDistribution msg:%s", args.UserSessionId, args.UserId, args.Method)
|
log.Debugf("SComp_GateRouteComp ReceiveMsg agent:%s uId:%s MessageDistribution msg:%s", args.UserSessionId, args.UserId, args.Method)
|
||||||
this.mrlock.RLock()
|
this.mrlock.RLock()
|
||||||
|
@ -10,6 +10,10 @@ import (
|
|||||||
"go_dreamfactory/lego/core"
|
"go_dreamfactory/lego/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
服务类型:gateway
|
||||||
|
服务描述:网关服务,提供客户端连接的服务,管理用户的socket对象以及用户消息的分发,只包含gateway业务模块
|
||||||
|
*/
|
||||||
var (
|
var (
|
||||||
conf = flag.String("conf", "./conf/gateway_1.yaml", "获取需要启动的服务配置文件") //启动服务的Id
|
conf = flag.String("conf", "./conf/gateway_1.yaml", "获取需要启动的服务配置文件") //启动服务的Id
|
||||||
)
|
)
|
||||||
|
@ -8,12 +8,15 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//梦工厂基础服务对象
|
||||||
type ServiceBase struct {
|
type ServiceBase struct {
|
||||||
rpcx.RPCXService
|
rpcx.RPCXService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//初始化相关系统
|
||||||
func (this *ServiceBase) InitSys() {
|
func (this *ServiceBase) InitSys() {
|
||||||
this.RPCXService.InitSys()
|
this.RPCXService.InitSys()
|
||||||
|
//初始化配置中心系统 每个服务都会用到的就在这个初始化就好
|
||||||
if err := configure.OnInit(this.GetSettings().Sys["configure"]); err != nil {
|
if err := configure.OnInit(this.GetSettings().Sys["configure"]); err != nil {
|
||||||
panic(fmt.Sprintf("init sys.configure err: %s", err.Error()))
|
panic(fmt.Sprintf("init sys.configure err: %s", err.Error()))
|
||||||
} else {
|
} else {
|
||||||
|
@ -14,6 +14,10 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
服务类型:web
|
||||||
|
服务描述:提供一些http服务,方便后期维护和开发过程中的测试,只包含 web 业务模块
|
||||||
|
*/
|
||||||
var (
|
var (
|
||||||
conf = flag.String("conf", "./conf/web_1.yaml", "获取需要启动的服务配置文件") //启动服务的Id
|
conf = flag.String("conf", "./conf/web_1.yaml", "获取需要启动的服务配置文件") //启动服务的Id
|
||||||
)
|
)
|
||||||
@ -25,7 +29,6 @@ func main() {
|
|||||||
rpcx.SetVersion("1.0.0.0"),
|
rpcx.SetVersion("1.0.0.0"),
|
||||||
)
|
)
|
||||||
s.OnInstallComp( //装备组件
|
s.OnInstallComp( //装备组件
|
||||||
services.NewGateRouteComp(),
|
|
||||||
)
|
)
|
||||||
lego.Run(s, //运行模块
|
lego.Run(s, //运行模块
|
||||||
web.NewModule(),
|
web.NewModule(),
|
||||||
|
@ -17,10 +17,15 @@ import (
|
|||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
服务类型:worker
|
||||||
|
服务描述:处理梦工厂的具体业务需求,包含 user,pack,mail,friend...功能业务模块
|
||||||
|
*/
|
||||||
var (
|
var (
|
||||||
conf = flag.String("conf", "./conf/worker.yaml", "获取需要启动的服务配置文件") //启动服务的Id
|
conf = flag.String("conf", "./conf/worker.yaml", "获取需要启动的服务配置文件") //启动服务的Id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*服务启动的入口函数*/
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
s := NewService(
|
s := NewService(
|
||||||
@ -28,10 +33,9 @@ func main() {
|
|||||||
rpcx.SetVersion("1.0.0.0"),
|
rpcx.SetVersion("1.0.0.0"),
|
||||||
)
|
)
|
||||||
s.OnInstallComp( //装备组件
|
s.OnInstallComp( //装备组件
|
||||||
services.NewGateRouteComp(),
|
services.NewGateRouteComp(), //此服务需要接受用户的消息 需要装备网关组件
|
||||||
)
|
)
|
||||||
lego.Run(s, //运行模块
|
lego.Run(s, //运行模块
|
||||||
// web.NewModule(),
|
|
||||||
user.NewModule(),
|
user.NewModule(),
|
||||||
pack.NewModule(),
|
pack.NewModule(),
|
||||||
mail.NewModule(),
|
mail.NewModule(),
|
||||||
@ -46,17 +50,21 @@ func NewService(ops ...rpcx.Option) core.IService {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//worker 的服务对象定义
|
||||||
type Service struct {
|
type Service struct {
|
||||||
services.ServiceBase
|
services.ServiceBase
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//初始化worker需要的一些系统工具
|
||||||
func (this *Service) InitSys() {
|
func (this *Service) InitSys() {
|
||||||
this.ServiceBase.InitSys()
|
this.ServiceBase.InitSys()
|
||||||
|
//缓存系统
|
||||||
if err := cache.OnInit(this.GetSettings().Sys["cache"]); err != nil {
|
if err := cache.OnInit(this.GetSettings().Sys["cache"]); err != nil {
|
||||||
panic(fmt.Sprintf("init sys.cache err: %s", err.Error()))
|
panic(fmt.Sprintf("init sys.cache err: %s", err.Error()))
|
||||||
} else {
|
} else {
|
||||||
log.Infof("init sys.cache success!")
|
log.Infof("init sys.cache success!")
|
||||||
}
|
}
|
||||||
|
//存储系统
|
||||||
if err := db.OnInit(this.GetSettings().Sys["db"]); err != nil {
|
if err := db.OnInit(this.GetSettings().Sys["db"]); err != nil {
|
||||||
panic(fmt.Sprintf("init sys.db err: %s", err.Error()))
|
panic(fmt.Sprintf("init sys.db err: %s", err.Error()))
|
||||||
} else {
|
} else {
|
||||||
|
7
sys/cache/core.go
vendored
7
sys/cache/core.go
vendored
@ -6,9 +6,10 @@ redis 缓存数据管理系统
|
|||||||
|
|
||||||
type (
|
type (
|
||||||
ISys interface {
|
ISys interface {
|
||||||
IUser //户模块的相关缓存接口
|
IUser //户模块的相关缓存接口
|
||||||
IPack //背包模块的线管缓存接口
|
IPack //背包模块的线管缓存接口
|
||||||
IMail //邮件相关的缓存接口
|
IMail //邮件相关的缓存接口
|
||||||
|
IFriend //好友相关的缓存接口
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
1
sys/cache/init_test.go
vendored
1
sys/cache/init_test.go
vendored
@ -8,6 +8,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//测试环境下初始化db和cache 系统
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
if err := db.OnInit(nil, db.Set_MongodbUrl("mongodb://admin:123456@10.0.0.9:27018"), db.Set_MongodbDatabase("dreamfactory")); err != nil {
|
if err := db.OnInit(nil, db.Set_MongodbUrl("mongodb://admin:123456@10.0.0.9:27018"), db.Set_MongodbDatabase("dreamfactory")); err != nil {
|
||||||
fmt.Printf("err:%v\n", err)
|
fmt.Printf("err:%v\n", err)
|
||||||
|
2
sys/cache/pack.go
vendored
2
sys/cache/pack.go
vendored
@ -11,7 +11,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const ( //Redis
|
const ( //Redis
|
||||||
Redis_PackCache string = "pack:%s"
|
Redis_PackCache string = "pack:%s" //背包缓存数据存放key
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
1
sys/cache/pack_test.go
vendored
1
sys/cache/pack_test.go
vendored
@ -6,6 +6,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//测试用户背包 添加物品
|
||||||
func Test_Pack_AddItemToUserPack(t *testing.T) {
|
func Test_Pack_AddItemToUserPack(t *testing.T) {
|
||||||
err := cache.Defsys.Pack_AddItemToUserPack("liwei1dao", 1001, 100)
|
err := cache.Defsys.Pack_AddItemToUserPack("liwei1dao", 1001, 100)
|
||||||
fmt.Printf("Pack_AddItemToUserPack err:%v\n", err)
|
fmt.Printf("Pack_AddItemToUserPack err:%v\n", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user