From 196cffb099e6dd3f272cca37a9ee95b49a761827 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Fri, 21 Aug 2020 19:27:07 +0800 Subject: [PATCH] ws async supported. close #122 --- global/config.go | 1 - main.go | 2 +- server/websocket.go | 34 +++++++++++++++++++--------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/global/config.go b/global/config.go index 3a51bf8..e41f7c4 100644 --- a/global/config.go +++ b/global/config.go @@ -14,7 +14,6 @@ type JsonConfig struct { AccessToken string `json:"access_token"` ReLogin bool `json:"relogin"` ReLoginDelay int `json:"relogin_delay"` - AsyncLoad bool `json:"async_load"` HttpConfig *GoCQHttpConfig `json:"http_config"` WSConfig *GoCQWebsocketConfig `json:"ws_config"` ReverseServers []*GoCQReverseWebsocketConfig `json:"ws_reverse_servers"` diff --git a/main.go b/main.go index bee7ab8..a3d2af6 100644 --- a/main.go +++ b/main.go @@ -200,7 +200,7 @@ func main() { global.Check(cli.ReloadFriendList()) log.Infof("共加载 %v 个好友.", len(cli.FriendList)) log.Infof("开始加载群列表...") - global.Check(cli.ReloadGroupList(conf.AsyncLoad)) + global.Check(cli.ReloadGroupList()) log.Infof("共加载 %v 个群.", len(cli.GroupList)) b := coolq.NewQQBot(cli, conf) if conf.PostMessageFormat != "string" && conf.PostMessageFormat != "array" { diff --git a/server/websocket.go b/server/websocket.go index 83ecc4e..d61afd5 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -157,14 +157,16 @@ func (c *websocketClient) listenApi(conn *websocket.Conn, u bool) { t := strings.ReplaceAll(j.Get("action").Str, "_async", "") log.Debugf("反向WS接收到API调用: %v 参数: %v", t, j.Get("params").Raw) if f, ok := wsApi[t]; ok { - ret := f(c.bot, j.Get("params")) - if j.Get("echo").Exists() { - ret["echo"] = j.Get("echo").Value() - } - c.pushLock.Lock() - log.Debugf("准备发送API %v 处理结果: %v", t, ret.ToJson()) - _ = conn.WriteJSON(ret) - c.pushLock.Unlock() + go func() { + ret := f(c.bot, j.Get("params")) + if j.Get("echo").Exists() { + ret["echo"] = j.Get("echo").Value() + } + c.pushLock.Lock() + log.Debugf("准备发送API %v 处理结果: %v", t, ret.ToJson()) + _ = conn.WriteJSON(ret) + c.pushLock.Unlock() + }() } } if c.conf.ReverseReconnectInterval != 0 { @@ -276,13 +278,15 @@ func (s *websocketServer) listenApi(c *websocket.Conn) { t := strings.ReplaceAll(j.Get("action").Str, "_async", "") //TODO: async support log.Debugf("WS接收到API调用: %v 参数: %v", t, j.Get("params").Raw) if f, ok := wsApi[t]; ok { - ret := f(s.bot, j.Get("params")) - if j.Get("echo").Exists() { - ret["echo"] = j.Get("echo").Value() - } - s.pushLock.Lock() - _ = c.WriteJSON(ret) - s.pushLock.Unlock() + go func() { + ret := f(s.bot, j.Get("params")) + if j.Get("echo").Exists() { + ret["echo"] = j.Get("echo").Value() + } + s.pushLock.Lock() + _ = c.WriteJSON(ret) + s.pushLock.Unlock() + }() } } }