77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
package base
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/globalsign/mgo/bson"
|
|
"mongo.games.com/goserver/core/logger"
|
|
)
|
|
|
|
type AccountData struct {
|
|
Acc string
|
|
Create int64
|
|
Time time.Time
|
|
}
|
|
|
|
var (
|
|
// 待使用的账号,将要建立连接
|
|
accChan = make(map[string]bool)
|
|
// 账号池,当前正在使用的机器人
|
|
accPool []*AccountData
|
|
)
|
|
var accountFileName = "robotaccount.json"
|
|
|
|
// InitAccountData 初始化机器人账号
|
|
func InitAccountData() {
|
|
dirty := false
|
|
newFunc := func(n int) {
|
|
for i := 0; i < n; i++ {
|
|
accId := bson.NewObjectId().Hex()
|
|
accPool = append(accPool, &AccountData{
|
|
Acc: accId,
|
|
Create: time.Now().UnixNano(),
|
|
Time: time.Now(),
|
|
})
|
|
}
|
|
dirty = true
|
|
}
|
|
|
|
fileData, err := os.ReadFile(accountFileName)
|
|
if err != nil {
|
|
logger.Logger.Error("Read robot account file error:", err)
|
|
//没有账号文件,创建新的一组账号
|
|
newFunc(Config.Count)
|
|
} else {
|
|
if err := json.Unmarshal(fileData, &accPool); err != nil {
|
|
logger.Logger.Error("Unmarshal robot account data error:", err)
|
|
//账号文件数据反序列化失败,创建新的账号数据
|
|
newFunc(Config.Count)
|
|
} else {
|
|
//核对文件中的账号数量
|
|
if len(accPool) < Config.Count {
|
|
//数量过少,添加一部分账号
|
|
newFunc(Config.Count - len(accPool))
|
|
}
|
|
}
|
|
}
|
|
|
|
for i := 0; i < Config.Count; i++ {
|
|
accChan[accPool[i].Acc] = true
|
|
}
|
|
|
|
if dirty {
|
|
//持久化本次的账号数据
|
|
buff, err := json.Marshal(accPool)
|
|
if err != nil {
|
|
logger.Logger.Error("Marshal account data error:", err)
|
|
} else {
|
|
err := os.WriteFile(accountFileName, buff, os.ModePerm)
|
|
if err != nil {
|
|
logger.Logger.Error("Write robot account file error:", err)
|
|
}
|
|
}
|
|
}
|
|
}
|