change: reconnect & protocol version close #14

This commit is contained in:
akiba
2023-08-20 17:06:52 +08:00
parent 3e0b84cba0
commit 4b7a21bc54
3 changed files with 8 additions and 8 deletions

View File

@@ -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

View File

@@ -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"`

View File

@@ -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 {