73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"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"
|
|
"git.hlsq.asia/mmorpg/service-gateway/internal/global"
|
|
"git.hlsq.asia/mmorpg/service-gateway/internal/grpc_server"
|
|
"github.com/judwhite/go-svc"
|
|
"sync"
|
|
)
|
|
|
|
type Program struct {
|
|
moduleList []module.Module // 模块列表
|
|
}
|
|
|
|
func (p *Program) Init(_ svc.Environment) error {
|
|
if err := config.LoadConfig(); err != nil {
|
|
return err
|
|
}
|
|
p.moduleList = append(p.moduleList, &module.Base{Log: config.Get().Log})
|
|
p.moduleList = append(p.moduleList, &module.DB{Cfg: config.Get().DB, AppName: config.Get().App.Name})
|
|
p.moduleList = append(p.moduleList, &ModuleWebServer{})
|
|
p.moduleList = append(p.moduleList, &ModuleWebsocketServer{})
|
|
p.moduleList = append(p.moduleList, &ModuleLoginQueue{})
|
|
p.moduleList = append(p.moduleList, &module.Grpc{Server: grpc_server.NewServer(config.Get().Serve.Grpc)})
|
|
p.moduleList = append(p.moduleList, &module.Prometheus{MetricCfg: config.Get().Metric})
|
|
p.moduleList = append(p.moduleList, &module.Tracer{MetricCfg: config.Get().Metric, ServiceName: common.KeyDiscoverServiceNameGateway})
|
|
p.moduleList = append(p.moduleList, &module.Discover{})
|
|
|
|
for _, m := range p.moduleList {
|
|
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 {
|
|
ready := &sync.WaitGroup{}
|
|
ready.Add(len(p.moduleList))
|
|
for _, m := range p.moduleList {
|
|
if err := m.Start(ready); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
ready.Wait()
|
|
for _, m := range p.moduleList {
|
|
if err := m.AfterStart(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
global.ServiceStatus = global.ServiceStatusReady
|
|
|
|
log.Infof(fmt.Sprintf("%v Start successful...", config.Get().App.Name))
|
|
return nil
|
|
}
|
|
|
|
func (p *Program) Stop() error {
|
|
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
|
|
}
|