package app import ( "fmt" "git.hlsq.asia/mmorpg/service-common/discover" "git.hlsq.asia/mmorpg/service-common/discover/common" "git.hlsq.asia/mmorpg/service-common/log" "git.hlsq.asia/mmorpg/service-common/module" "git.hlsq.asia/mmorpg/service-gateway/config" "github.com/judwhite/go-svc" ) type Program struct { moduleList []module.Module // 模块列表 } func (p *Program) Init(_ svc.Environment) error { base := &ModuleBase{} if err := base.Init(); err != nil { return err } p.moduleList = append(p.moduleList, base) p.moduleList = append(p.moduleList, (&module.DB{}).Bind(config.Get().DB)) p.moduleList = append(p.moduleList, &ModulePrometheus{}) p.moduleList = append(p.moduleList, &ModuleWebServer{}) p.moduleList = append(p.moduleList, &ModuleWebsocketServer{}) p.moduleList = append(p.moduleList, &ModuleGrpcServer{}) p.moduleList = append(p.moduleList, &ModuleLoginQueue{}) p.moduleList = append(p.moduleList, (&module.Tracer{}).Bind(config.Get().Metric, common.KeyDiscoverServiceNameGateway)) for i, m := range p.moduleList { if i == 0 { continue } if err := m.Init(); err != nil { return err } } log.Infof(fmt.Sprintf("%v Init successful...", config.Get().App.Name)) return nil } func (p *Program) Start() error { for _, m := range p.moduleList { if err := m.Start(); err != nil { return err } } discover.Listen() log.Infof(fmt.Sprintf("%v Start successful...", config.Get().App.Name)) return nil } func (p *Program) Stop() error { discover.Close() for i := len(p.moduleList) - 1; i >= 0; i-- { m := p.moduleList[i] if err := m.Stop(); err != nil { log.Errorf("module stop error: %v", err) } } log.Infof(fmt.Sprintf("%v Stop successful...", config.Get().App.Name)) return nil }