From 0a9e8552579277b9c7d3a47db4d2c9dae3e9b236 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Wed, 8 Jun 2022 19:10:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=BB=A3=E7=A0=81=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- comm/usersession.go | 17 +++++++++++++++++ modules/core.go | 6 ++++-- modules/gate_comp.go | 14 ++++++++++---- modules/gateway/agent.go | 5 +++++ modules/gateway/agentmgr_comp.go | 7 +++++++ modules/gateway/core.go | 2 ++ modules/gateway/module.go | 23 ++++++++++++++++++++--- modules/gateway/options.go | 7 ++++++- modules/modulebase.go | 6 ++++++ modules/pack/api_comp.go | 27 ++++++++------------------- modules/pack/configure_comp.go | 1 + modules/pack/module.go | 7 +++++-- modules/web/api_comp.go | 10 +++++++--- modules/web/module.go | 26 ++++++++------------------ services/comp_gateroute.go | 18 ++++++++++++++---- services/gateway/main.go | 4 ++++ services/servicebase.go | 3 +++ services/web/main.go | 5 ++++- services/worker/main.go | 12 ++++++++++-- sys/cache/core.go | 7 ++++--- sys/cache/init_test.go | 1 + sys/cache/pack.go | 2 +- sys/cache/pack_test.go | 1 + 23 files changed, 148 insertions(+), 63 deletions(-) diff --git a/comm/usersession.go b/comm/usersession.go index 73625663f..e47fe3e37 100644 --- a/comm/usersession.go +++ b/comm/usersession.go @@ -11,6 +11,10 @@ import ( "google.golang.org/protobuf/proto" ) +/* +用户会话对象 跨服操作用户的对象 +*/ + func NewUserSession(service base.IRPCXService, ip, sessionId, gatewayServiceId string, uid string) IUserSession { return &UserSession{ IP: ip, @@ -29,24 +33,32 @@ type UserSession struct { service base.IRPCXService } +//获取用户的会话id func (this *UserSession) GetSessionId() string { return this.SessionId } +//获取用户的uid func (this *UserSession) GetUserId() string { return this.UserId } + +//获取用户的远程ip地址 func (this *UserSession) GetIP() string { return this.IP } + +//用户当先所在网关服务 func (this *UserSession) GetGatewayServiceId() string { return this.GatewayServiceId } +//是否登录 func (this *UserSession) IsLogin() bool { return this.UserId != "" } +//绑定uid 登录后操作 func (this *UserSession) Build(uid string) (err error) { reply := &pb.RPCMessageReply{} 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 } +//解绑uid 注销和切换账号是处理 func (this *UserSession) UnBuild(ServiceMethod string, msg proto.Message) (err error) { reply := &pb.RPCMessageReply{} 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 } +//向用户发送消息 func (this *UserSession) SendMsg(mainType, subType string, code pb.ErrorCode, msg proto.Message) (err error) { reply := &pb.RPCMessageReply{} data, _ := proto.Marshal(msg) @@ -83,6 +97,8 @@ func (this *UserSession) SendMsg(mainType, subType string, code pb.ErrorCode, ms } return } + +//关闭用户连接对象 func (this *UserSession) Close() (err error) { reply := &pb.RPCMessageReply{} 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 } +//打印日志需要 func (this *UserSession) ToString() string { return fmt.Sprintf("SessionId:%s UserId:%s GatewayServiceId:%s", this.SessionId, this.UserId, this.GatewayServiceId) } diff --git a/modules/core.go b/modules/core.go index f6f0e550d..b0befc809 100644 --- a/modules/core.go +++ b/modules/core.go @@ -1,17 +1,19 @@ package modules import ( - "go_dreamfactory/pb" - "go_dreamfactory/lego/core" + "go_dreamfactory/pb" "google.golang.org/protobuf/proto" ) type ( + //业务模块基类接口 定义所有业务模块都可以使用的接口 IModule interface { core.IModule + ///向指定用户发送消息 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) } ) diff --git a/modules/gate_comp.go b/modules/gate_comp.go index b9ae39de7..097ff4dd7 100644 --- a/modules/gate_comp.go +++ b/modules/gate_comp.go @@ -14,6 +14,10 @@ import ( "go_dreamfactory/lego/core/cbase" ) +/* +模块网关组件的基类实现 模块接收用户的消息请求都需要通过装备继承此组件的api组件来实现 +*/ + var typeOfContext = reflect.TypeOf((*context.Context)(nil)).Elem() var typeOfSession = reflect.TypeOf((*comm.IUserSession)(nil)).Elem() var typeOfError = reflect.TypeOf((*error)(nil)).Elem() @@ -23,20 +27,21 @@ var typeOfError = reflect.TypeOf((*error)(nil)).Elem() */ type MComp_GateComp struct { cbase.ModuleCompBase - service base.IRPCXService - module core.IModule - comp core.IModuleComp + service base.IRPCXService //rpc服务对象 + module core.IModule //当前业务模块 + comp core.IModuleComp //网关组件自己 } +//组件初始化接口 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.service = service.(base.IRPCXService) this.module = module this.comp = comp - return } +//组件启动接口,启动时将自己接收用户消息的处理函数注册到services/comp_gateroute.go 对象中 func (this *MComp_GateComp) Start() (err error) { if err = this.ModuleCompBase.Start(); err != nil { return @@ -50,6 +55,7 @@ func (this *MComp_GateComp) Start() (err error) { return } +//反射注册相关接口道services/comp_gateroute.go 对象中 func (this *MComp_GateComp) suitableMethods(scomp comm.ISC_GateRouteComp, typ reflect.Type) { for m := 0; m < typ.NumMethod(); m++ { method := typ.Method(m) diff --git a/modules/gateway/agent.go b/modules/gateway/agent.go index daeb4d291..2371e9ba5 100644 --- a/modules/gateway/agent.go +++ b/modules/gateway/agent.go @@ -15,6 +15,11 @@ import ( "google.golang.org/protobuf/proto" ) +/* +用户代理对象 +封装用户socket 对象 处理用户的消息读取 写入 关闭等操作 +*/ + func newAgent(gateway IGateway, conn *websocket.Conn) *Agent { agent := &Agent{ gateway: gateway, diff --git a/modules/gateway/agentmgr_comp.go b/modules/gateway/agentmgr_comp.go index 04dbea280..86cdbd470 100644 --- a/modules/gateway/agentmgr_comp.go +++ b/modules/gateway/agentmgr_comp.go @@ -9,6 +9,9 @@ import ( "go_dreamfactory/lego/core/cbase" ) +/* +用户代理对象管理组件 +*/ type AgentMgr_Comp struct { cbase.ModuleCompBase agents *sync.Map @@ -19,9 +22,13 @@ func (this *AgentMgr_Comp) Init(service core.IService, module core.IModule, comp this.agents = new(sync.Map) return } + +//加入新的用户 func (this *AgentMgr_Comp) Connect(a IAgent) { this.agents.Store(a.SessionId(), a) } + +//移除断开的用户 func (this *AgentMgr_Comp) DisConnect(a IAgent) { this.agents.Delete(a.SessionId()) } diff --git a/modules/gateway/core.go b/modules/gateway/core.go index 4605d0010..72dde7195 100644 --- a/modules/gateway/core.go +++ b/modules/gateway/core.go @@ -8,6 +8,7 @@ import ( ) type ( + //用户代理对象接口定义 IAgent interface { SessionId() string IP() string @@ -17,6 +18,7 @@ type ( WriteMsg(msg *pb.UserMessage) (err error) Close() //主动关闭接口 } + //网关模块 接口定义 IGateway interface { core.IModule Service() base.IRPCXService diff --git a/modules/gateway/module.go b/modules/gateway/module.go index a0459d52b..5e3275f6d 100644 --- a/modules/gateway/module.go +++ b/modules/gateway/module.go @@ -9,6 +9,11 @@ import ( "go_dreamfactory/lego/sys/log" ) +/* +模块名:gateway +描述:提供客户端网关路由服务 管理用户socket对象 以及分发用户消息 +开发:李伟 +*/ func NewModule() core.IModule { m := new(Gateway) return m @@ -17,39 +22,51 @@ func NewModule() core.IModule { type Gateway struct { modules.ModuleBase service base.IRPCXService - wsservice_comp *WSService_Comp - agentmgr_comp *AgentMgr_Comp + wsservice_comp *WSService_Comp //websocket 服务组件 提供websocket服务监听 + agentmgr_comp *AgentMgr_Comp //用户代理对象管理组件 管理用户socekt对象 } +//模块名 func (this *Gateway) GetType() core.M_Modules { return comm.SM_GateModule } +//模块自定义参数 func (this *Gateway) NewOptions() (options core.IModuleOptions) { return new(Options) } +//提供服务对象获取接口 func (this *Gateway) Service() base.IRPCXService { return this.service } +//模块初始化函数 func (this *Gateway) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) this.service = service.(base.IRPCXService) return } +//模块启动函数 注册rpc服务接口提供用户相关的rpc接口服务 func (this *Gateway) Start() (err error) { + //注册用户绑定uid接口 登录成功后触发 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_GatewayAgentSendMsg), this.agentmgr_comp.SendMsgToAgent) + //向多个用户对象发送消息接口 this.service.RegisterFunctionName(string(comm.Rpc_GatewaySendBatchMsg), this.agentmgr_comp.SendMsgToAgents) + //向所有用户发送消息接口 this.service.RegisterFunctionName(string(comm.Rpc_GatewaySendRadioMsg), this.agentmgr_comp.SendMsgToAllAgent) + //关闭用户socket连接接口 this.service.RegisterFunctionName(string(comm.Rpc_GatewayAgentClose), this.agentmgr_comp.CloseAgent) err = this.ModuleBase.Start() return } +//装备组件 func (this *Gateway) OnInstallComp() { this.ModuleBase.OnInstallComp() 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) } -//有新的连接对象进入 +//有用户断开连接 func (this *Gateway) DisConnect(a IAgent) { log.Debugf("[Module.Gateway] have disConnect:Ip[%s] SessionId:[%s] uid:[%s]", a.IP(), a.SessionId(), a.UserId()) this.agentmgr_comp.DisConnect(a) diff --git a/modules/gateway/options.go b/modules/gateway/options.go index 9ca5f3e6f..87c1f797a 100644 --- a/modules/gateway/options.go +++ b/modules/gateway/options.go @@ -4,12 +4,17 @@ import ( "go_dreamfactory/lego/utils/mapstructure" ) +/* +网关模块 参数定义 +*/ + type ( Options struct { - ListenPort int + ListenPort int //websocket 监听端口 } ) +//序列化参数对象 func (this *Options) LoadConfig(settings map[string]interface{}) (err error) { if settings != nil { err = mapstructure.Decode(settings, this) diff --git a/modules/modulebase.go b/modules/modulebase.go index 773f830da..5d5a48e39 100644 --- a/modules/modulebase.go +++ b/modules/modulebase.go @@ -13,17 +13,22 @@ import ( "google.golang.org/protobuf/proto" ) +/* +基础业务模块实现 封装一些通用的接口提供给业务模块使用 +*/ type ModuleBase struct { cbase.ModuleBase service base.IRPCXService } +//模块初始化接口 func (this *ModuleBase) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) this.service = service.(base.IRPCXService) return } +//向指定用户发送消息 func (this *ModuleBase) SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error) { reply := &pb.RPCMessageReply{} data, _ := proto.Marshal(msg) @@ -38,6 +43,7 @@ func (this *ModuleBase) SendMsgToUser(mainType, subType string, msg proto.Messag return } +//向多个用户发送消息 func (this *ModuleBase) SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error) { var ( gateways map[string][]string = make(map[string][]string) diff --git a/modules/pack/api_comp.go b/modules/pack/api_comp.go index c7d684dc2..236b470e8 100644 --- a/modules/pack/api_comp.go +++ b/modules/pack/api_comp.go @@ -11,22 +11,22 @@ import ( "go_dreamfactory/lego/sys/log" ) -const ( - QueryUserPackReq = "pack.queryuserpackreq" - QueryUserPackResp = "pack.queryuserpackresp" - UseItemReq = "pack.useitemreq" - UseItemResp = "pack.useitemresp" - SellItemReq = "pack.sellitemreq" - SellItemResp = "pack.sellitemresp" +const ( //消息回复的头名称 + QueryUserPackResp = "queryuserpackresp" + UseItemResp = "useitemresp" + SellItemResp = "sellitemresp" ) +/* +背包 处理用户的请求组件 必须继承 modules.MComp_GateComp +*/ type Api_Comp struct { modules.MComp_GateComp service core.IService module *Pack - mail comm.Imail } +//组件初始化接口 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.service = service @@ -34,17 +34,6 @@ func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core 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) { var ( diff --git a/modules/pack/configure_comp.go b/modules/pack/configure_comp.go index cc45c8f7c..a82f56908 100644 --- a/modules/pack/configure_comp.go +++ b/modules/pack/configure_comp.go @@ -20,6 +20,7 @@ type Configure_Comp struct { cbase.ModuleCompBase } +//组件初始化接口 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) configure.RegisterConfigure(game_item, cfg.NewGame_item) diff --git a/modules/pack/module.go b/modules/pack/module.go index 8d7fef028..c409771d8 100644 --- a/modules/pack/module.go +++ b/modules/pack/module.go @@ -22,20 +22,23 @@ func NewModule() core.IModule { type Pack struct { modules.ModuleBase - api_comp *Api_Comp - configure_comp *Configure_Comp + api_comp *Api_Comp //背包模块 协议处理组件 + configure_comp *Configure_Comp //背包模块 配置相关接口封装组件 } +//模块名称 func (this *Pack) GetType() core.M_Modules { return comm.SM_PackModule } +//模块初始化接口 注册用户创建角色事件 func (this *Pack) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) event.RegisterGO(comm.Event_CreateUser, this.event_CreateUser) return } +//装备组件 func (this *Pack) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp) diff --git a/modules/web/api_comp.go b/modules/web/api_comp.go index ff5c86d32..64bfb7d97 100644 --- a/modules/web/api_comp.go +++ b/modules/web/api_comp.go @@ -12,13 +12,17 @@ import ( "go_dreamfactory/lego/sys/log" ) +/* + web api 服务组件 +*/ type Api_Comp struct { cbase.ModuleCompBase - options *Options - module *Web - gin gin.ISys + options *Options //模块参数 + module *Web //当前模块对象 + 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) { err = this.ModuleCompBase.Init(service, module, comp, options) this.options = options.(*Options) diff --git a/modules/web/module.go b/modules/web/module.go index 14ad174bc..4c78b9768 100644 --- a/modules/web/module.go +++ b/modules/web/module.go @@ -3,11 +3,15 @@ package web import ( "go_dreamfactory/comm" "go_dreamfactory/modules" - cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/lego/core" ) +/* +模块名:web +描述:为服务集群提供一些http服务接口 方便测试和后期运维实现 +开发:李伟 +*/ func NewModule() core.IModule { m := new(Web) return m @@ -16,14 +20,15 @@ func NewModule() core.IModule { type Web struct { modules.ModuleBase options *Options - table *cfg.TbItem - api_comp *Api_Comp + api_comp *Api_Comp //提供weba pi服务的组件 } +//模块名 func (this *Web) GetType() core.M_Modules { return comm.SM_WebModule } +//模块自定义参数 func (this *Web) NewOptions() (options core.IModuleOptions) { return new(Options) } @@ -34,21 +39,6 @@ func (this *Web) Init(service core.IService, module core.IModule, options core.I 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() { this.ModuleBase.OnInstallComp() this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp) diff --git a/services/comp_gateroute.go b/services/comp_gateroute.go index 49e4c6e54..eee7a21b9 100644 --- a/services/comp_gateroute.go +++ b/services/comp_gateroute.go @@ -15,28 +15,36 @@ import ( "google.golang.org/protobuf/proto" ) +/* + 服务网关组件 用于接收网关服务发送过来的消息 +*/ + func NewGateRouteComp() comm.ISC_GateRouteComp { comp := new(SComp_GateRouteComp) return comp } +//用户协议处理函数注册的反射对象 type msghandle struct { rcvr reflect.Value msgType reflect.Type fn reflect.Method } +//服务网关组件 type SComp_GateRouteComp struct { cbase.ServiceCompBase - service base.IRPCXService - mrlock sync.RWMutex - msghandles map[string]*msghandle + service base.IRPCXService //rpc服务对象 通过这个对象可以发布服务和调用其他服务的接口 + mrlock sync.RWMutex //msghandles 对象的锁 + msghandles map[string]*msghandle //处理函数的管理对象 } +//设置服务组件名称 方便业务模块中获取此组件对象 func (this *SComp_GateRouteComp) GetName() core.S_Comps { return comm.SC_ServiceGateRouteComp } +//组件初始化函数 func (this *SComp_GateRouteComp) Init(service core.IService, comp core.IServiceComp, options core.ICompOptions) (err error) { err = this.ServiceCompBase.Init(service, comp, options) this.service = service.(base.IRPCXService) @@ -44,13 +52,14 @@ func (this *SComp_GateRouteComp) Init(service core.IService, comp core.IServiceC return err } +//组件启动时注册rpc服务监听 func (this *SComp_GateRouteComp) Start() (err error) { this.service.RegisterFunctionName(string(comm.Rpc_GatewayRoute), this.ReceiveMsg) //注册网关路由接收接口 err = this.ServiceCompBase.Start() return } -//注册路由 +//业务模块注册用户消息处理路由 func (this *SComp_GateRouteComp) RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, fn reflect.Method) { log.Debugf("注册用户路由【%s】", methodName) this.mrlock.RLock() @@ -69,6 +78,7 @@ func (this *SComp_GateRouteComp) RegisterRoute(methodName string, comp reflect.V this.mrlock.Unlock() } +//Rpc_GatewayRoute服务接口的接收函数 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) this.mrlock.RLock() diff --git a/services/gateway/main.go b/services/gateway/main.go index f53abb136..e110fb4ed 100644 --- a/services/gateway/main.go +++ b/services/gateway/main.go @@ -10,6 +10,10 @@ import ( "go_dreamfactory/lego/core" ) +/* + 服务类型:gateway + 服务描述:网关服务,提供客户端连接的服务,管理用户的socket对象以及用户消息的分发,只包含gateway业务模块 +*/ var ( conf = flag.String("conf", "./conf/gateway_1.yaml", "获取需要启动的服务配置文件") //启动服务的Id ) diff --git a/services/servicebase.go b/services/servicebase.go index eb8634a8a..ce2327298 100644 --- a/services/servicebase.go +++ b/services/servicebase.go @@ -8,12 +8,15 @@ import ( "go_dreamfactory/lego/sys/log" ) +//梦工厂基础服务对象 type ServiceBase struct { rpcx.RPCXService } +//初始化相关系统 func (this *ServiceBase) InitSys() { this.RPCXService.InitSys() + //初始化配置中心系统 每个服务都会用到的就在这个初始化就好 if err := configure.OnInit(this.GetSettings().Sys["configure"]); err != nil { panic(fmt.Sprintf("init sys.configure err: %s", err.Error())) } else { diff --git a/services/web/main.go b/services/web/main.go index 686219c60..a609ec6e9 100644 --- a/services/web/main.go +++ b/services/web/main.go @@ -14,6 +14,10 @@ import ( "go_dreamfactory/lego/sys/log" ) +/* + 服务类型:web + 服务描述:提供一些http服务,方便后期维护和开发过程中的测试,只包含 web 业务模块 +*/ var ( conf = flag.String("conf", "./conf/web_1.yaml", "获取需要启动的服务配置文件") //启动服务的Id ) @@ -25,7 +29,6 @@ func main() { rpcx.SetVersion("1.0.0.0"), ) s.OnInstallComp( //装备组件 - services.NewGateRouteComp(), ) lego.Run(s, //运行模块 web.NewModule(), diff --git a/services/worker/main.go b/services/worker/main.go index 161a6e512..3458ede0f 100644 --- a/services/worker/main.go +++ b/services/worker/main.go @@ -17,10 +17,15 @@ import ( "go_dreamfactory/lego/sys/log" ) +/* + 服务类型:worker + 服务描述:处理梦工厂的具体业务需求,包含 user,pack,mail,friend...功能业务模块 +*/ var ( conf = flag.String("conf", "./conf/worker.yaml", "获取需要启动的服务配置文件") //启动服务的Id ) +/*服务启动的入口函数*/ func main() { flag.Parse() s := NewService( @@ -28,10 +33,9 @@ func main() { rpcx.SetVersion("1.0.0.0"), ) s.OnInstallComp( //装备组件 - services.NewGateRouteComp(), + services.NewGateRouteComp(), //此服务需要接受用户的消息 需要装备网关组件 ) lego.Run(s, //运行模块 - // web.NewModule(), user.NewModule(), pack.NewModule(), mail.NewModule(), @@ -46,17 +50,21 @@ func NewService(ops ...rpcx.Option) core.IService { return s } +//worker 的服务对象定义 type Service struct { services.ServiceBase } +//初始化worker需要的一些系统工具 func (this *Service) InitSys() { this.ServiceBase.InitSys() + //缓存系统 if err := cache.OnInit(this.GetSettings().Sys["cache"]); err != nil { panic(fmt.Sprintf("init sys.cache err: %s", err.Error())) } else { log.Infof("init sys.cache success!") } + //存储系统 if err := db.OnInit(this.GetSettings().Sys["db"]); err != nil { panic(fmt.Sprintf("init sys.db err: %s", err.Error())) } else { diff --git a/sys/cache/core.go b/sys/cache/core.go index c09e98254..79073b21d 100644 --- a/sys/cache/core.go +++ b/sys/cache/core.go @@ -6,9 +6,10 @@ redis 缓存数据管理系统 type ( ISys interface { - IUser //户模块的相关缓存接口 - IPack //背包模块的线管缓存接口 - IMail //邮件相关的缓存接口 + IUser //户模块的相关缓存接口 + IPack //背包模块的线管缓存接口 + IMail //邮件相关的缓存接口 + IFriend //好友相关的缓存接口 } ) diff --git a/sys/cache/init_test.go b/sys/cache/init_test.go index d4f4942fb..af9cc838e 100644 --- a/sys/cache/init_test.go +++ b/sys/cache/init_test.go @@ -8,6 +8,7 @@ import ( "testing" ) +//测试环境下初始化db和cache 系统 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 { fmt.Printf("err:%v\n", err) diff --git a/sys/cache/pack.go b/sys/cache/pack.go index 7cd16cd67..84e315bb6 100644 --- a/sys/cache/pack.go +++ b/sys/cache/pack.go @@ -11,7 +11,7 @@ import ( ) const ( //Redis - Redis_PackCache string = "pack:%s" + Redis_PackCache string = "pack:%s" //背包缓存数据存放key ) const ( diff --git a/sys/cache/pack_test.go b/sys/cache/pack_test.go index 1ca59d02d..ed6b9bfbe 100644 --- a/sys/cache/pack_test.go +++ b/sys/cache/pack_test.go @@ -6,6 +6,7 @@ import ( "testing" ) +//测试用户背包 添加物品 func Test_Pack_AddItemToUserPack(t *testing.T) { err := cache.Defsys.Pack_AddItemToUserPack("liwei1dao", 1001, 100) fmt.Printf("Pack_AddItemToUserPack err:%v\n", err)