game_sync/robot/base/init.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)
}
}
}
}