feat 初次提交

This commit is contained in:
2026-01-03 14:26:11 +08:00
parent 5afccdb8de
commit 04a8fa2344
15 changed files with 602 additions and 0 deletions

55
app/app.go Normal file
View File

@@ -0,0 +1,55 @@
package app
import (
"common/log"
"fmt"
"github.com/judwhite/go-svc"
"robot/config"
)
type Program struct {
moduleList []Module // 模块列表
}
type Module interface {
init() error
start() error
stop() error
}
func (p *Program) Init(_ svc.Environment) error {
p.moduleList = append(p.moduleList, &ModuleBase{})
p.moduleList = append(p.moduleList, &ModuleWebsocket{})
p.moduleList = append(p.moduleList, &ModulePprof{})
for _, module := range p.moduleList {
if err := module.init(); err != nil {
return err
}
}
log.Infof(fmt.Sprintf("%v Init successful...", config.Get().App.Name))
return nil
}
func (p *Program) Start() error {
for _, module := range p.moduleList {
if err := module.start(); err != nil {
return err
}
}
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-- {
module := p.moduleList[i]
if err := module.stop(); err != nil {
log.Errorf("module stop error: %v", err)
}
}
log.Infof(fmt.Sprintf("%v Stop successful...", config.Get().App.Name))
return nil
}

33
app/base.go Normal file
View File

@@ -0,0 +1,33 @@
package app
import (
"common/log"
"common/utils"
"math/rand"
"robot/config"
)
// ModuleBase 基础模块,或者一些零散的模块
type ModuleBase struct {
}
func (p *ModuleBase) init() error {
// 配置
if err := config.LoadConfig(); err != nil {
return err
}
cfg := config.Get()
// 日志
log.Init(cfg.Log.Debug, cfg.Log.MaxSize, cfg.Log.MaxBackups, cfg.Log.MaxAge, cfg.Log.Level)
// 雪花
utils.InitSnowflake(int64(rand.Intn(1000)))
return nil
}
func (p *ModuleBase) start() error {
return nil
}
func (p *ModuleBase) stop() error {
return nil
}

44
app/pprof.go Normal file
View File

@@ -0,0 +1,44 @@
package app
import (
"common/log"
"context"
"errors"
"net/http"
_ "net/http/pprof"
"sync"
)
// ModulePprof pprof模块
type ModulePprof struct {
wg *sync.WaitGroup
server *http.Server
}
func (m *ModulePprof) init() error {
m.wg = &sync.WaitGroup{}
return nil
}
func (m *ModulePprof) start() error {
m.wg.Add(1)
go func() {
defer m.wg.Done()
m.server = &http.Server{
Addr: "localhost:6060",
}
if err := m.server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Errorf("pprof server failed: %v", err.Error())
}
log.Infof("pprof server stop.")
}()
return nil
}
func (m *ModulePprof) stop() error {
if err := m.server.Shutdown(context.Background()); err != nil {
log.Errorf("stop pprof server failed: %v", err)
}
m.wg.Wait()
return nil
}

31
app/websocket.go Normal file
View File

@@ -0,0 +1,31 @@
package app
import (
"fmt"
"robot/config"
"robot/internal/ws"
)
// ModuleWebsocket Websocket客户端模块
type ModuleWebsocket struct {
manager *ws.Manager
}
func (p *ModuleWebsocket) init() error {
cfg := config.Get().Client
addr := fmt.Sprintf("%s:%d", cfg.Websocket.Address, cfg.Websocket.Port)
if cfg.Websocket.Port == 0 {
addr = cfg.Websocket.Address
}
p.manager = ws.NewManager(addr)
return nil
}
func (p *ModuleWebsocket) start() error {
p.manager.Start()
return nil
}
func (p *ModuleWebsocket) stop() error {
return nil
}