88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
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)
|
|
// }
|