mirror of
https://github.com/AynaLivePlayer/blivedm-go.git
synced 2025-12-06 11:22:50 +08:00
change: reconnect & protocol version close #14
This commit is contained in:
@@ -22,6 +22,7 @@ type Client struct {
|
|||||||
token string
|
token string
|
||||||
host string
|
host string
|
||||||
hostList []string
|
hostList []string
|
||||||
|
retryCount int
|
||||||
eventHandlers *eventHandlers
|
eventHandlers *eventHandlers
|
||||||
customEventHandlers *customEventHandlers
|
customEventHandlers *customEventHandlers
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
@@ -34,6 +35,7 @@ func NewClient(roomID string, uid string) *Client {
|
|||||||
return &Client{
|
return &Client{
|
||||||
tempID: roomID,
|
tempID: roomID,
|
||||||
uid: uid,
|
uid: uid,
|
||||||
|
retryCount: 0,
|
||||||
eventHandlers: &eventHandlers{},
|
eventHandlers: &eventHandlers{},
|
||||||
customEventHandlers: &customEventHandlers{},
|
customEventHandlers: &customEventHandlers{},
|
||||||
done: ctx.Done(),
|
done: ctx.Done(),
|
||||||
@@ -73,21 +75,20 @@ func (c *Client) init() error {
|
|||||||
func (c *Client) connect() error {
|
func (c *Client) connect() error {
|
||||||
reqHeader := &http.Header{}
|
reqHeader := &http.Header{}
|
||||||
reqHeader.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36")
|
reqHeader.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36")
|
||||||
retryCount := 0
|
|
||||||
retry:
|
retry:
|
||||||
// 随着重连会自动切换弹幕服务器
|
c.host = c.hostList[c.retryCount%len(c.hostList)]
|
||||||
c.host = c.hostList[retryCount%len(c.hostList)]
|
c.retryCount++
|
||||||
retryCount++
|
|
||||||
conn, res, err := websocket.DefaultDialer.Dial(fmt.Sprintf("wss://%s/sub", c.host), *reqHeader)
|
conn, res, err := websocket.DefaultDialer.Dial(fmt.Sprintf("wss://%s/sub", c.host), *reqHeader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("connect dial failed, retry %d times", retryCount)
|
log.Errorf("connect dial failed, retry %d times", c.retryCount)
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(2 * time.Second)
|
||||||
goto retry
|
goto retry
|
||||||
}
|
}
|
||||||
c.conn = conn
|
c.conn = conn
|
||||||
res.Body.Close()
|
res.Body.Close()
|
||||||
if err = c.sendEnterPacket(); err != nil {
|
if err = c.sendEnterPacket(); err != nil {
|
||||||
log.Errorf("failed to send enter packet, retry %d times", retryCount)
|
log.Errorf("failed to send enter packet, retry %d times", c.retryCount)
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
goto retry
|
goto retry
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ type Enter struct {
|
|||||||
UID int `json:"uid"`
|
UID int `json:"uid"`
|
||||||
RoomID int `json:"roomid"`
|
RoomID int `json:"roomid"`
|
||||||
ProtoVer int `json:"protover"`
|
ProtoVer int `json:"protover"`
|
||||||
Buvid string `json:"buvid"`
|
|
||||||
Platform string `json:"platform"`
|
Platform string `json:"platform"`
|
||||||
Type int `json:"type"`
|
Type int `json:"type"`
|
||||||
Key string `json:"key"`
|
Key string `json:"key"`
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ func NewPacket(protocolVersion uint16, operation uint32, body []byte) Packet {
|
|||||||
// NewPlainPacket 构造新的 Plain 包
|
// NewPlainPacket 构造新的 Plain 包
|
||||||
// 对外暴露的方法中 operation 全部使用int
|
// 对外暴露的方法中 operation 全部使用int
|
||||||
func NewPlainPacket(operation int, body []byte) Packet {
|
func NewPlainPacket(operation int, body []byte) Packet {
|
||||||
return NewPacket(Plain, uint32(operation), body)
|
return NewPacket(1, uint32(operation), body)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPacketFromBytes(data []byte) Packet {
|
func NewPacketFromBytes(data []byte) Packet {
|
||||||
|
|||||||
Reference in New Issue
Block a user