This repository has been archived on 2026-01-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Game/Server/Gateway/app/app.go

82 lines
1.6 KiB
Go

package app
import (
"common/db/etcd"
"common/discover"
"common/log"
"common/net/grpc/service"
"common/net/socket/websocket"
"fmt"
"gateway/config"
"gateway/grpc_server/server"
"github.com/gin-gonic/gin"
"github.com/judwhite/go-svc"
"runtime/debug"
"sync"
)
type Program struct {
wg *sync.WaitGroup
server service.IService // grpc服务
webServer *gin.Engine // web服务
wsServer *websocket.WSServer // websocket服务
stop chan bool
}
func (p *Program) Init(_ svc.Environment) error {
if err := p.initBase(); err != nil {
return err
}
cfg := config.Get()
log.Infof(fmt.Sprintf("%v starting...", cfg.App.Name))
if err := p.initDB(cfg); err != nil {
return err
}
if err := p.initWebServer(cfg); err != nil {
return err
}
if err := p.initWsServer(cfg); err != nil {
return err
}
return nil
}
func (p *Program) Start() error {
defer func() {
if err := recover(); err != nil {
fmt.Printf("Start err: %v", err)
debug.PrintStack()
_ = p.Stop()
}
}()
discover.Listen()
p.server = server.NewServer(config.Get().Serve.Grpc.TTL)
p.server.Init(config.Get().Serve.Grpc.Address, config.Get().Serve.Grpc.Port)
go func() {
cfg := config.Get()
_ = p.wsServer.Run(
log.GetLogger().Named("gnet"),
fmt.Sprintf("tcp4://0.0.0.0:%v", cfg.Serve.Socket.Web.Port),
true, true, false, false, true, 8,
)
}()
return nil
}
func (p *Program) Stop() error {
defer func() {
if err := recover(); err != nil {
fmt.Printf("Stop err: %v", err)
debug.PrintStack()
}
}()
discover.Close()
p.server.Close()
_ = etcd.Close()
return nil
}