package beatleader // import ( // "log" // "time" // "git.lxtend.com/qqbot/sqlite3" // "git.lxtend.com/qqbot/util" // "github.com/gorilla/websocket" // ) // const wsURL = "wss://sockets.api.beatleader.xyz/scores" // var BlScoresManager = blScoresManager{} // type blScoresManager struct { // conn *websocket.Conn // retryTimes int // } // func init() { // for err := BlScoresManager.connect(); err != nil; err = BlScoresManager.connect() { // log.Print("连接 WebSocket 失败:", err) // time.Sleep(time.Second) // } // util.AddCycleTask("cleanOldScores", 0, 1*time.Hour, cleanOldScores) // } // func (bm *blScoresManager) connect() error { // var err error // bm.conn, _, err = websocket.DefaultDialer.Dial(wsURL, nil) // if err != nil { // return err // } // bm.retryTimes = 0 // go bm.receiveData() // return nil // } // func (sm *blScoresManager) receiveData() { // defer func() { // for err := BlScoresManager.connect(); err != nil; err = BlScoresManager.connect() { // log.Printf("连接 WebSocket 失败:%v", err) // time.Sleep(time.Second) // } // }() // for { // var scoreData ScoreData // err := sm.conn.ReadJSON(&scoreData) // if err != nil { // log.Print("读取数据失败:", err) // time.Sleep(time.Second) // sm.retryTimes++ // if sm.retryTimes > 3 { // return // } // continue // } // BLQuery.SaveRecord(scoreData) // } // } // // func (sm *blScoresManager) GetRecentScores(count int, predict string) []RecordDataLite { // // db := sqlite3.GetDB() // // scoresCopy := make([]RecordDataLite, 0, count) // // query := "SELECT * FROM blRecordData" // // if predict != "" { // // query += " " + predict // // } // // query += " ORDER BY generated_time DESC LIMIT ?" // // err := db.Select(&scoresCopy, query, count) // // if err != nil { // // log.Print(err) // // return nil // // } // // return scoresCopy // // } // func cleanOldScores() { // db := sqlite3.GetDB() // ssBind := make([]string, 0) // db.Select(&ssBind, "SELECT ssid FROM ssBind") // db.Exec("DELETE FROM blRecordData WHERE generated_time < ? AND ssid NOT IN (?)", time.Now().AddDate(0, 0, -1).Unix(), ssBind) // }