package app import ( "common/db/etcd" "common/discover" "common/log" "common/net/grpc/service" "common/net/socket/websocket" "fmt" "github.com/gin-gonic/gin" "github.com/judwhite/go-svc" "runtime/debug" "scene/config" "scene/grpc_server" "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 } } 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 }