82 lines
1.6 KiB
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"
|
|
"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 cfg, err := p.initBase(); err != nil {
|
|
return err
|
|
} else {
|
|
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 = grpc_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
|
|
}
|