feat app 模块
This commit is contained in:
34
app/app.go
34
app/app.go
@@ -3,32 +3,36 @@ 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 // 模块列表
|
||||
}
|
||||
|
||||
type Module interface {
|
||||
init() error
|
||||
start() error
|
||||
stop() error
|
||||
moduleList []module.Module // 模块列表
|
||||
}
|
||||
|
||||
func (p *Program) Init(_ svc.Environment) error {
|
||||
p.moduleList = append(p.moduleList, &ModuleBase{})
|
||||
p.moduleList = append(p.moduleList, &ModuleDB{})
|
||||
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 _, module := range p.moduleList {
|
||||
if err := module.init(); err != nil {
|
||||
for i, m := range p.moduleList {
|
||||
if i == 0 {
|
||||
continue
|
||||
}
|
||||
if err := m.Init(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -37,8 +41,8 @@ func (p *Program) Init(_ svc.Environment) error {
|
||||
}
|
||||
|
||||
func (p *Program) Start() error {
|
||||
for _, module := range p.moduleList {
|
||||
if err := module.start(); err != nil {
|
||||
for _, m := range p.moduleList {
|
||||
if err := m.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -51,8 +55,8 @@ func (p *Program) Start() error {
|
||||
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 {
|
||||
m := p.moduleList[i]
|
||||
if err := m.Stop(); err != nil {
|
||||
log.Errorf("module stop error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
11
app/base.go
11
app/base.go
@@ -2,6 +2,7 @@ package app
|
||||
|
||||
import (
|
||||
"git.hlsq.asia/mmorpg/service-common/log"
|
||||
"git.hlsq.asia/mmorpg/service-common/module"
|
||||
"git.hlsq.asia/mmorpg/service-common/utils"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/config"
|
||||
"math/rand"
|
||||
@@ -11,7 +12,7 @@ import (
|
||||
type ModuleBase struct {
|
||||
}
|
||||
|
||||
func (p *ModuleBase) init() error {
|
||||
func (m *ModuleBase) Init() error {
|
||||
// 配置
|
||||
if err := config.LoadConfig(); err != nil {
|
||||
return err
|
||||
@@ -24,10 +25,14 @@ func (p *ModuleBase) init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *ModuleBase) start() error {
|
||||
func (m *ModuleBase) Start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *ModuleBase) stop() error {
|
||||
func (m *ModuleBase) Stop() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleBase) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
23
app/db.go
23
app/db.go
@@ -1,23 +0,0 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"git.hlsq.asia/mmorpg/service-common/db"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/config"
|
||||
)
|
||||
|
||||
// ModuleDB 数据库模块
|
||||
type ModuleDB struct {
|
||||
dbModule *db.ModuleDB
|
||||
}
|
||||
|
||||
func (p *ModuleDB) init() error {
|
||||
return p.dbModule.Init(config.Get().DB)
|
||||
}
|
||||
|
||||
func (p *ModuleDB) start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *ModuleDB) stop() error {
|
||||
return p.dbModule.Stop()
|
||||
}
|
||||
11
app/grpc.go
11
app/grpc.go
@@ -1,6 +1,7 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"git.hlsq.asia/mmorpg/service-common/module"
|
||||
"git.hlsq.asia/mmorpg/service-common/net/grpc/service"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/config"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/grpc_server"
|
||||
@@ -11,17 +12,21 @@ type ModuleGrpcServer struct {
|
||||
server service.IService
|
||||
}
|
||||
|
||||
func (m *ModuleGrpcServer) init() error {
|
||||
func (m *ModuleGrpcServer) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleGrpcServer) start() error {
|
||||
func (m *ModuleGrpcServer) Start() error {
|
||||
m.server = grpc_server.NewServer(config.Get().Serve.Grpc.TTL)
|
||||
m.server.Init(config.Get().Serve.Grpc.Address, config.Get().Serve.Grpc.Port)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleGrpcServer) stop() error {
|
||||
func (m *ModuleGrpcServer) Stop() error {
|
||||
m.server.Close()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleGrpcServer) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"git.hlsq.asia/mmorpg/service-common/module"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/global"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/handler/ws_handler/login"
|
||||
"runtime"
|
||||
@@ -12,18 +13,22 @@ type ModuleLoginQueue struct {
|
||||
queueUp *login.QueueUp
|
||||
}
|
||||
|
||||
func (m *ModuleLoginQueue) init() error {
|
||||
func (m *ModuleLoginQueue) Init() error {
|
||||
m.login = login.NewLoginQueue(global.MaxQueueUpSize)
|
||||
m.queueUp = login.NewQueueUp(global.MaxQueueUpSize)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleLoginQueue) start() error {
|
||||
func (m *ModuleLoginQueue) Start() error {
|
||||
m.login.Start(runtime.NumCPU())
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleLoginQueue) stop() error {
|
||||
func (m *ModuleLoginQueue) Stop() error {
|
||||
m.login.Stop()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleLoginQueue) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"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"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
@@ -19,7 +20,7 @@ type ModulePrometheus struct {
|
||||
server *http.Server
|
||||
}
|
||||
|
||||
func (m *ModulePrometheus) init() error {
|
||||
func (m *ModulePrometheus) Init() error {
|
||||
m.wg = &sync.WaitGroup{}
|
||||
|
||||
global.OnlineUsersGauge = prometheus.NewGauge(prometheus.GaugeOpts{
|
||||
@@ -31,7 +32,7 @@ func (m *ModulePrometheus) init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModulePrometheus) start() error {
|
||||
func (m *ModulePrometheus) Start() error {
|
||||
m.wg.Add(1)
|
||||
go func() {
|
||||
defer m.wg.Done()
|
||||
@@ -47,10 +48,14 @@ func (m *ModulePrometheus) start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModulePrometheus) stop() error {
|
||||
func (m *ModulePrometheus) Stop() error {
|
||||
if err := m.server.Shutdown(context.Background()); err != nil {
|
||||
log.Errorf("stop prometheus server failed: %v", err)
|
||||
}
|
||||
m.wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModulePrometheus) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
11
app/web.go
11
app/web.go
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"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/net/http_gateway"
|
||||
"net/http"
|
||||
@@ -17,12 +18,12 @@ type ModuleWebServer struct {
|
||||
server *http.Server
|
||||
}
|
||||
|
||||
func (m *ModuleWebServer) init() error {
|
||||
func (m *ModuleWebServer) Init() error {
|
||||
m.wg = &sync.WaitGroup{}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebServer) start() error {
|
||||
func (m *ModuleWebServer) Start() error {
|
||||
m.wg.Add(1)
|
||||
go func() {
|
||||
defer m.wg.Done()
|
||||
@@ -38,10 +39,14 @@ func (m *ModuleWebServer) start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebServer) stop() error {
|
||||
func (m *ModuleWebServer) Stop() error {
|
||||
if err := m.server.Shutdown(context.Background()); err != nil {
|
||||
log.Errorf("stop http server failed: %v", err)
|
||||
}
|
||||
m.wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebServer) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package app
|
||||
import (
|
||||
"fmt"
|
||||
"git.hlsq.asia/mmorpg/service-common/log"
|
||||
"git.hlsq.asia/mmorpg/service-common/module"
|
||||
"git.hlsq.asia/mmorpg/service-common/net/socket/websocket"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/config"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/net/ws_gateway"
|
||||
@@ -17,7 +18,7 @@ type ModuleWebsocketServer struct {
|
||||
server *websocket.WSServer
|
||||
}
|
||||
|
||||
func (m *ModuleWebsocketServer) init() error {
|
||||
func (m *ModuleWebsocketServer) Init() error {
|
||||
m.wg = &sync.WaitGroup{}
|
||||
m.server = websocket.NewWSServer(
|
||||
&ws_gateway.GatewayWsServer{},
|
||||
@@ -27,7 +28,7 @@ func (m *ModuleWebsocketServer) init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebsocketServer) start() error {
|
||||
func (m *ModuleWebsocketServer) Start() error {
|
||||
m.wg.Add(1)
|
||||
go func() {
|
||||
defer m.wg.Done()
|
||||
@@ -47,10 +48,14 @@ func (m *ModuleWebsocketServer) start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebsocketServer) stop() error {
|
||||
func (m *ModuleWebsocketServer) Stop() error {
|
||||
if err := m.server.Stop(); err != nil {
|
||||
log.Errorf("stop websocket server failed: %v", err)
|
||||
}
|
||||
m.wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebsocketServer) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user