fix concurrent error

This commit is contained in:
aynakeya
2024-04-26 19:12:04 -07:00
parent 6565ab4176
commit 4a59ec1fa8

View File

@@ -7,6 +7,7 @@ import (
"net/http"
"regexp"
"strings"
"sync"
"time"
"github.com/AynaLivePlayer/blivedm-go/api"
@@ -30,6 +31,7 @@ type Client struct {
cancel context.CancelFunc
done <-chan struct{}
api api.IApi
lock sync.RWMutex
}
// NewClient 创建一个新的弹幕 client
@@ -43,6 +45,7 @@ func NewClient(roomID int) *Client {
done: ctx.Done(),
cancel: cancel,
api: nil,
lock: sync.RWMutex{},
}
}
@@ -155,9 +158,11 @@ func (c *Client) heartBeatLoop() {
case <-c.done:
return
case <-time.After(30 * time.Second):
c.lock.Lock()
if err := c.conn.WriteMessage(websocket.BinaryMessage, pkt); err != nil {
log.Error(err)
}
c.lock.Unlock()
log.Debug("send: HeartBeat")
}
}
@@ -192,6 +197,8 @@ func (c *Client) UseDefaultHost() {
func (c *Client) sendEnterPacket() error {
pkt := packet.NewEnterPacket(c.Uid, c.Buvid, c.RoomID, c.token)
c.lock.Lock()
defer c.lock.Unlock()
if err := c.conn.WriteMessage(websocket.BinaryMessage, pkt); err != nil {
return err
}