62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package app
|
|
|
|
import (
|
|
"common/discover"
|
|
"common/log"
|
|
"fmt"
|
|
"gateway/config"
|
|
"github.com/judwhite/go-svc"
|
|
)
|
|
|
|
type Program struct {
|
|
moduleList []Module // 模块列表
|
|
}
|
|
|
|
type Module interface {
|
|
Init() error
|
|
Start() error
|
|
Stop() error
|
|
}
|
|
|
|
func (p *Program) Init(_ svc.Environment) error {
|
|
p.moduleList = append(p.moduleList, &ModuleBase{})
|
|
p.moduleList = append(p.moduleList, &ModuleDB{})
|
|
p.moduleList = append(p.moduleList, &ModulePrometheus{})
|
|
p.moduleList = append(p.moduleList, &ModuleWebServer{})
|
|
p.moduleList = append(p.moduleList, &ModuleWebsocketServer{})
|
|
p.moduleList = append(p.moduleList, &ModuleGrpcServer{})
|
|
|
|
for _, module := range p.moduleList {
|
|
if err := module.Init(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
log.Infof(fmt.Sprintf("%v Init successful...", config.Get().App.Name))
|
|
return nil
|
|
}
|
|
|
|
func (p *Program) Start() error {
|
|
for _, module := range p.moduleList {
|
|
if err := module.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-- {
|
|
module := p.moduleList[i]
|
|
if err := module.Stop(); err != nil {
|
|
log.Errorf("module stop error: %v", err)
|
|
}
|
|
}
|
|
|
|
log.Infof(fmt.Sprintf("%v Stop successful...", config.Get().App.Name))
|
|
return nil
|
|
}
|