From 32b3e1e548c4848bb02636a6907d9abd5194b023 Mon Sep 17 00:00:00 2001 From: boyce Date: Thu, 31 Jan 2019 14:10:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9D=97=E6=A0=91?= =?UTF-8?q?=E7=8A=B6=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/main.go | 16 +++++++++++ service/Service.go | 72 ++++++++++++++++++++++++++-------------------- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/Test/main.go b/Test/main.go index dbdd360..5fe039f 100644 --- a/Test/main.go +++ b/Test/main.go @@ -56,6 +56,14 @@ type CTestData struct { Ddd string } +type CTestModule struct { + service.BaseModule +} + +func (ws *CTestModule) DoSomething() { + fmt.Printf("CTestModule do some thing!") +} + func (ws *CTest) RPC_LogTicker2(args *CTestData, quo *CTestData) error { *quo = *args @@ -83,6 +91,14 @@ func (ws *CTest) OnRun() error { fmt.Print(err, test2) //} + //模块的示例 + testModule := CTestModule{} + testModule.SetModuleType(1) + ws.AddModule(&testModule) + + pTmpModule := ws.GetModuleByType(1) + pTmpModuleTest := pTmpModule.(*CTestModule) + pTmpModuleTest.DoSomething() return nil } diff --git a/service/Service.go b/service/Service.go index 17f81b5..eddb890 100644 --- a/service/Service.go +++ b/service/Service.go @@ -18,10 +18,12 @@ type MethodInfo struct { } type IBaseModule interface { - SetModuleName(modulename string) bool - GetModuleName() string + SetModuleType(moduleType uint32) + GetModuleType() uint32 OnInit() error OnRun() error + AddModule(module IBaseModule) bool + GetModuleByType(moduleType uint32) IBaseModule } type IService interface { @@ -42,8 +44,6 @@ type IService interface { GetServiceId() int IsTimeOutTick(microSecond int64) bool - AddModule(module IBaseModule, autorun bool) bool - GetModule(module string) IBaseModule GetStatus() int } @@ -62,6 +62,8 @@ func InitLog() { } type BaseService struct { + BaseModule + serviceid int servicename string servicetype int @@ -69,21 +71,11 @@ type BaseService struct { tickTime int64 statTm int64 Status int - - modulelist []IBaseModule } type BaseModule struct { - modulename string -} - -func (slf *BaseModule) SetModuleName(modulename string) bool { - slf.modulename = modulename - return true -} - -func (slf *BaseModule) GetModuleName() string { - return slf.modulename + moduleType uint32 + mapModule map[uint32]IBaseModule } func (slf *BaseService) GetServiceId() int { @@ -178,28 +170,46 @@ func (slf *BaseService) IsTimeOutTick(microSecond int64) bool { } -func (slf *BaseService) AddModule(module IBaseModule, autorun bool) bool { - typename := fmt.Sprintf("%v", reflect.TypeOf(module)) - parts := strings.Split(typename, ".") - if len(parts) < 2 { +func (slf *BaseModule) SetModuleType(moduleType uint32) { + slf.moduleType = moduleType +} + +func (slf *BaseModule) GetModuleType() uint32 { + return slf.moduleType +} + +//OnInit() error +//OnRun() error +func (slf *BaseModule) AddModule(module IBaseModule) bool { + if module.GetModuleType() == 0 { return false } - module.SetModuleName(parts[1]) - slf.modulelist = append(slf.modulelist, module) - module.OnInit() - if autorun == true { - go module.OnRun() + + if slf.mapModule == nil { + slf.mapModule = make(map[uint32]IBaseModule) } + _, ok := slf.mapModule[module.GetModuleType()] + if ok == true { + return false + } + + slf.mapModule[module.GetModuleType()] = module return true } -func (slf *BaseService) GetModule(module string) IBaseModule { - for _, v := range slf.modulelist { - if v.GetModuleName() == module { - return v - } +func (slf *BaseModule) GetModuleByType(moduleType uint32) IBaseModule { + ret, ok := slf.mapModule[moduleType] + if ok == false { + return nil } - return nil + return ret +} +func (slf *BaseModule) OnInit() error { + return fmt.Errorf("not implement OnInit moduletype %d ", slf.GetModuleType()) +} + +func (slf *BaseModule) OnRun() error { + return fmt.Errorf("not implement OnRun moduletype %d ", slf.GetModuleType()) }