1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-06 03:53:50 +08:00

Merge pull request #166 from F0ur/master

fix(ws): fix eventConn panic when ws connect close
This commit is contained in:
Mrs4s 2020-08-23 00:31:52 +08:00 committed by GitHub
commit b4229c5b0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -324,18 +324,21 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
func (s *websocketServer) onBotPushEvent(m coolq.MSG) { func (s *websocketServer) onBotPushEvent(m coolq.MSG) {
s.eventConnMutex.Lock() s.eventConnMutex.Lock()
defer s.eventConnMutex.Unlock() defer s.eventConnMutex.Unlock()
pos := 0 for i, l := 0, len(s.eventConn); i < l; i++ {
for _, conn := range s.eventConn { conn := s.eventConn[i]
log.Debugf("向WS客户端 %v 推送Event: %v", conn.RemoteAddr().String(), m.ToJson()) log.Debugf("向WS客户端 %v 推送Event: %v", conn.RemoteAddr().String(), m.ToJson())
err := conn.WriteMessage(websocket.TextMessage, []byte(m.ToJson())) if err := conn.WriteMessage(websocket.TextMessage, []byte(m.ToJson())); err != nil {
if err != nil {
_ = conn.Close() _ = conn.Close()
s.eventConn = append(s.eventConn[:pos], s.eventConn[pos+1:]...) next := i + 1
if pos > 0 { if next >= l {
pos++ next = l - 1
} }
s.eventConn[i], s.eventConn[next] = s.eventConn[next], s.eventConn[i]
s.eventConn = append(s.eventConn[:next], s.eventConn[next+1:]...)
i--
l--
conn = nil
} }
pos++
} }
} }