1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 19:43:49 +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) {
s.eventConnMutex.Lock()
defer s.eventConnMutex.Unlock()
pos := 0
for _, conn := range s.eventConn {
for i, l := 0, len(s.eventConn); i < l; i++ {
conn := s.eventConn[i]
log.Debugf("向WS客户端 %v 推送Event: %v", conn.RemoteAddr().String(), m.ToJson())
err := conn.WriteMessage(websocket.TextMessage, []byte(m.ToJson()))
if err != nil {
if err := conn.WriteMessage(websocket.TextMessage, []byte(m.ToJson())); err != nil {
_ = conn.Close()
s.eventConn = append(s.eventConn[:pos], s.eventConn[pos+1:]...)
if pos > 0 {
pos++
next := i + 1
if next >= l {
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++
}
}