diff --git a/main.go b/main.go index f64347c..a647833 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,7 @@ import ( "golang.org/x/term" _ "github.com/Mrs4s/go-cqhttp/modules/mime" // mime检查模块 + "github.com/Mrs4s/go-cqhttp/modules/servers" _ "github.com/Mrs4s/go-cqhttp/modules/silk" // silk编码模块 "github.com/Mrs4s/go-cqhttp/coolq" @@ -26,7 +27,6 @@ import ( "github.com/Mrs4s/go-cqhttp/global/terminal" "github.com/Mrs4s/go-cqhttp/internal/base" "github.com/Mrs4s/go-cqhttp/internal/selfupdate" - "github.com/Mrs4s/go-cqhttp/modules/config" "github.com/Mrs4s/go-cqhttp/server" ) @@ -325,49 +325,8 @@ func main() { base.Account.Status = 0 } cli.SetOnlineStatus(allowStatus[base.Account.Status]) - bot := coolq.NewQQBot(cli) - for _, m := range base.Servers { - if h, ok := m["http"]; ok { - hc := new(config.HTTPServer) - if err := h.Decode(hc); err != nil { - log.Warn("读取http配置失败 :", err) - } else if !hc.Disabled { - go server.RunHTTPServerAndClients(bot, hc) - } - } - if s, ok := m["ws"]; ok { - sc := new(config.WebsocketServer) - if err := s.Decode(sc); err != nil { - log.Warn("读取正向Websocket配置失败 :", err) - } else if !sc.Disabled { - go server.RunWebSocketServer(bot, sc) - } - } - if c, ok := m["ws-reverse"]; ok { - rc := new(config.WebsocketReverse) - if err := c.Decode(rc); err != nil { - log.Warn("读取反向Websocket配置失败 :", err) - } else if !rc.Disabled { - go server.RunWebSocketClient(bot, rc) - } - } - if p, ok := m["pprof"]; ok { - pc := new(config.PprofServer) - if err := p.Decode(pc); err != nil { - log.Warn("读取pprof配置失败 :", err) - } else if !pc.Disabled { - go server.RunPprofServer(pc) - } - } - if p, ok := m["lambda"]; ok { - lc := new(config.LambdaServer) - if err := p.Decode(lc); err != nil { - log.Warn("读取pprof配置失败 :", err) - } else if !lc.Disabled { - go server.RunLambdaClient(bot, lc) - } - } - } + + servers.Run(coolq.NewQQBot(cli)) log.Info("资源初始化完成, 开始处理信息.") log.Info("アトリは、高性能ですから!") diff --git a/modules/servers/servers.go b/modules/servers/servers.go new file mode 100644 index 0000000..33e77c5 --- /dev/null +++ b/modules/servers/servers.go @@ -0,0 +1,30 @@ +package servers + +import ( + "gopkg.in/yaml.v3" + + "github.com/Mrs4s/go-cqhttp/coolq" + "github.com/Mrs4s/go-cqhttp/internal/base" +) + +var svr = make(map[string]func(*coolq.CQBot, yaml.Node)) + +// Register 注册 Server +func Register(name string, proc func(*coolq.CQBot, yaml.Node)) { + _, ok := svr[name] + if ok { + panic(name + " server has existed") + } + svr[name] = proc +} + +// Run 运行所有svr +func Run(bot *coolq.CQBot) { + for _, l := range base.Servers { + for name, conf := range l { + if fn, ok := svr[name]; ok { + go fn(bot, conf) + } + } + } +} diff --git a/server/doc.go b/server/doc.go index 3d4b43d..f0a6bdd 100644 --- a/server/doc.go +++ b/server/doc.go @@ -1,2 +1,13 @@ // Package server 包含HTTP,WebSocket,反向WebSocket请求处理的相关函数与结构体 package server + +import "github.com/Mrs4s/go-cqhttp/modules/servers" + +// 注册 +func init() { + servers.Register("http", runHTTP) + servers.Register("ws", runWSServer) + servers.Register("ws-reverse", runWSClient) + servers.Register("pprof", runPprof) + servers.Register("lambda", runLambda) +} diff --git a/server/http.go b/server/http.go index 767c02c..7eda02e 100644 --- a/server/http.go +++ b/server/http.go @@ -19,6 +19,7 @@ import ( "github.com/Mrs4s/MiraiGo/utils" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" + "gopkg.in/yaml.v3" "github.com/Mrs4s/go-cqhttp/coolq" "github.com/Mrs4s/go-cqhttp/modules/config" @@ -149,13 +150,19 @@ func checkAuth(req *http.Request, token string) int { } } -// RunHTTPServerAndClients 启动HTTP服务器与HTTP上报客户端 -func RunHTTPServerAndClients(bot *coolq.CQBot, conf *config.HTTPServer) { - var ( - s = new(httpServer) - addr string - ) - s.accessToken = conf.AccessToken +// runHTTP 启动HTTP服务器与HTTP上报客户端 +func runHTTP(bot *coolq.CQBot, node yaml.Node) { + var conf config.HTTPServer + switch err := node.Decode(&conf); { + case err != nil: + log.Warn("读取http配置失败 :", err) + fallthrough + case conf.Disabled: + return + } + + var addr string + s := &httpServer{accessToken: conf.AccessToken} if conf.Host == "" || conf.Port == 0 { goto client } diff --git a/server/pprof.go b/server/pprof.go index 5ea0640..00b4988 100644 --- a/server/pprof.go +++ b/server/pprof.go @@ -8,12 +8,23 @@ import ( "time" log "github.com/sirupsen/logrus" + "gopkg.in/yaml.v3" + "github.com/Mrs4s/go-cqhttp/coolq" "github.com/Mrs4s/go-cqhttp/modules/config" ) -// RunPprofServer 启动 pprof 性能分析服务器 -func RunPprofServer(conf *config.PprofServer) { +// runPprof 启动 pprof 性能分析服务器 +func runPprof(_ *coolq.CQBot, node yaml.Node) { + var conf config.PprofServer + switch err := node.Decode(&conf); { + case err != nil: + log.Warn("读取pprof配置失败 :", err) + fallthrough + case conf.Disabled: + return + } + addr := fmt.Sprintf("%s:%d", conf.Host, conf.Port) mux := http.NewServeMux() mux.HandleFunc("/debug/pprof/", pprof.Index) diff --git a/server/scf.go b/server/scf.go index 68f6da5..6a0ef8e 100644 --- a/server/scf.go +++ b/server/scf.go @@ -13,6 +13,7 @@ import ( "github.com/Mrs4s/MiraiGo/utils" log "github.com/sirupsen/logrus" + "gopkg.in/yaml.v3" "github.com/Mrs4s/go-cqhttp/coolq" "github.com/Mrs4s/go-cqhttp/global" @@ -77,8 +78,17 @@ func (l *lambdaResponseWriter) WriteHeader(statusCode int) { var cli *lambdaClient -// RunLambdaClient type: [scf,aws] -func RunLambdaClient(bot *coolq.CQBot, conf *config.LambdaServer) { +// runLambda type: [scf,aws] +func runLambda(bot *coolq.CQBot, node yaml.Node) { + var conf config.LambdaServer + switch err := node.Decode(&conf); { + case err != nil: + log.Warn("读取lambda配置失败 :", err) + fallthrough + case conf.Disabled: + return + } + cli = &lambdaClient{ lambdaType: conf.Type, client: http.Client{Timeout: 0}, diff --git a/server/websocket.go b/server/websocket.go index a7e3f1c..5200aed 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -10,6 +10,8 @@ import ( "sync" "time" + "gopkg.in/yaml.v3" + "github.com/Mrs4s/go-cqhttp/coolq" "github.com/Mrs4s/go-cqhttp/global" "github.com/Mrs4s/go-cqhttp/modules/config" @@ -54,11 +56,20 @@ var upgrader = websocket.Upgrader{ }, } -// RunWebSocketServer 运行一个正向WS server -func RunWebSocketServer(b *coolq.CQBot, conf *config.WebsocketServer) { +// runWSServer 运行一个正向WS server +func runWSServer(b *coolq.CQBot, node yaml.Node) { + var conf config.WebsocketServer + switch err := node.Decode(&conf); { + case err != nil: + log.Warn("读取正向Websocket配置失败 :", err) + fallthrough + case conf.Disabled: + return + } + s := &webSocketServer{ bot: b, - conf: conf, + conf: &conf, token: conf.AccessToken, filter: conf.Filter, } @@ -77,11 +88,20 @@ func RunWebSocketServer(b *coolq.CQBot, conf *config.WebsocketServer) { }() } -// RunWebSocketClient 运行一个正向WS client -func RunWebSocketClient(b *coolq.CQBot, conf *config.WebsocketReverse) { +// runWSClient 运行一个反向向WS client +func runWSClient(b *coolq.CQBot, node yaml.Node) { + var conf config.WebsocketReverse + switch err := node.Decode(&conf); { + case err != nil: + log.Warn("读取反向Websocket配置失败 :", err) + fallthrough + case conf.Disabled: + return + } + c := &websocketClient{ bot: b, - conf: conf, + conf: &conf, token: conf.AccessToken, filter: conf.Filter, }