mirror of
https://github.com/AynaLivePlayer/blivedm-go.git
synced 2025-12-06 19:32:49 +08:00
fix concurrent error
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/AynaLivePlayer/blivedm-go/api"
|
"github.com/AynaLivePlayer/blivedm-go/api"
|
||||||
@@ -30,6 +31,7 @@ type Client struct {
|
|||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
done <-chan struct{}
|
done <-chan struct{}
|
||||||
api api.IApi
|
api api.IApi
|
||||||
|
lock sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClient 创建一个新的弹幕 client
|
// NewClient 创建一个新的弹幕 client
|
||||||
@@ -43,6 +45,7 @@ func NewClient(roomID int) *Client {
|
|||||||
done: ctx.Done(),
|
done: ctx.Done(),
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
api: nil,
|
api: nil,
|
||||||
|
lock: sync.RWMutex{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,9 +158,11 @@ func (c *Client) heartBeatLoop() {
|
|||||||
case <-c.done:
|
case <-c.done:
|
||||||
return
|
return
|
||||||
case <-time.After(30 * time.Second):
|
case <-time.After(30 * time.Second):
|
||||||
|
c.lock.Lock()
|
||||||
if err := c.conn.WriteMessage(websocket.BinaryMessage, pkt); err != nil {
|
if err := c.conn.WriteMessage(websocket.BinaryMessage, pkt); err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
|
c.lock.Unlock()
|
||||||
log.Debug("send: HeartBeat")
|
log.Debug("send: HeartBeat")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,6 +197,8 @@ func (c *Client) UseDefaultHost() {
|
|||||||
|
|
||||||
func (c *Client) sendEnterPacket() error {
|
func (c *Client) sendEnterPacket() error {
|
||||||
pkt := packet.NewEnterPacket(c.Uid, c.Buvid, c.RoomID, c.token)
|
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 {
|
if err := c.conn.WriteMessage(websocket.BinaryMessage, pkt); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user