Skip to content

Commit e3b0c76

Browse files
committed
fix websocket
1 parent 2cfc2f4 commit e3b0c76

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

pkg/bot/bot.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,12 @@ func SetRelogin(cli *client.QQClient, retryInterval int, retryCount int) {
102102
// ReleaseClient 断开连接并释放资源
103103
func ReleaseClient(cli *client.QQClient) {
104104
cli.Release()
105-
delete(Clients, cli.Uin)
105+
delete(Clients, cli.Uin) // 必须先删Clients,影响IsClientExist
106106
delete(LoginTokens, cli.Uin)
107+
for _, wsServer := range RemoteServers[cli.Uin] {
108+
wsServer.Close()
109+
}
110+
delete(RemoteServers, cli.Uin)
107111
}
108112

109113
func IsClientExist(uin int64) bool {

pkg/bot/remote.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import (
1919
)
2020

2121
var (
22-
WsServers = make(map[string]*WsServer) // TODO 线程安全?改用sync.map
22+
// RemoteServers key是botId,value是map(key是serverName,value是server)
23+
RemoteServers = make(map[int64]map[string]*WsServer) // TODO 线程安全?改用sync.map
2324
)
2425

2526
type WsServer struct {
@@ -30,6 +31,8 @@ type WsServer struct {
3031
}
3132

3233
func ConnectUniversal(cli *client.QQClient) {
34+
botServers := map[string]*WsServer{}
35+
RemoteServers[cli.Uin] = botServers
3336
for _, group := range config.Conf.ServerGroups {
3437
if group.Disabled || group.Urls == nil || len(group.Urls) < 1 {
3538
continue
@@ -64,7 +67,7 @@ func ConnectUniversal(cli *client.QQClient) {
6467
}()
6568
closeChan <- 1
6669
})
67-
WsServers[serverGroup.Name] = &WsServer{
70+
botServers[serverGroup.Name] = &WsServer{
6871
SafeWebSocket: safeWs,
6972
ServerGroup: &serverGroup,
7073
wsUrl: serverUrl,
@@ -74,7 +77,7 @@ func ConnectUniversal(cli *client.QQClient) {
7477
if regex, err := regexp.Compile(serverGroup.RegexFilter); err != nil {
7578
log.Errorf("failed to compile [%s], regex_filter: %s", serverGroup.Name, serverGroup.RegexFilter)
7679
} else {
77-
WsServers[serverGroup.Name].regexp = regex
80+
botServers[serverGroup.Name].regexp = regex
7881
}
7982
}
8083
util.SafeGo(func() {
@@ -87,7 +90,7 @@ func ConnectUniversal(cli *client.QQClient) {
8790
})
8891
<-closeChan
8992
close(closeChan)
90-
delete(WsServers, serverGroup.Name)
93+
delete(botServers, serverGroup.Name)
9194
log.Warnf("Websocket 服务器 [%s](%s) 已断开,5秒后重连", serverGroup.Name, serverUrl)
9295
time.Sleep(5 * time.Second)
9396
}
@@ -264,8 +267,7 @@ func HandleEventFrame(cli *client.QQClient, eventFrame *onebot.Frame) {
264267
return
265268
}
266269

267-
for _, ws := range WsServers {
268-
270+
for _, ws := range RemoteServers[cli.Uin] {
269271
if ws.EventFilter != nil && len(ws.EventFilter) > 0 { // 有event filter
270272
if !int32SliceContains(ws.EventFilter, int32(eventFrame.FrameType)) {
271273
log.Debugf("EventFilter 跳过 [%s](%s)", ws.Name, ws.wsUrl)

0 commit comments

Comments
 (0)