- 使用 sync.Map 替代 map+锁,提升并发读写性能 - 预加载所有元素组合,避免运行时重复创建 - 攻击系数计算结果加入缓存,提高查询效率 - 完善缓存键命名与错误处理机制 - 调整元素组合字符串展示格式,增强可读性 fix(item): 修复购买物品时价格为0仍扣除金币的问题 - 在购买逻辑中增加对物品价格是否为0的判断 - 防止免费物品被误扣金币
97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
package service
|
||
|
||
import (
|
||
"blazing/cool"
|
||
"blazing/modules/blazing/model"
|
||
"encoding/binary"
|
||
"encoding/hex"
|
||
"fmt"
|
||
"math/rand"
|
||
"strings"
|
||
"time"
|
||
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
type LoginService struct {
|
||
*cool.Service
|
||
}
|
||
|
||
func NewLoginServiceService() *LoginService {
|
||
return &LoginService{
|
||
&cool.Service{
|
||
Model: model.NewServerList(),
|
||
},
|
||
}
|
||
}
|
||
|
||
// 生成session
|
||
func (s *LoginService) GetSessionId(accountID uint) (string, string, error) {
|
||
|
||
t1, _ := uuid.NewV7()
|
||
tt := strings.Replace(t1.String(), "-", "", -1)
|
||
|
||
rand.NewSource(time.Now().UnixNano())
|
||
|
||
// 生成4个随机字节
|
||
bytes := make([]byte, 4)
|
||
for i := range bytes {
|
||
bytes[i] = byte(rand.Intn(256)) // 生成0-255之间的随机数
|
||
}
|
||
|
||
buf2 := make([]byte, 4) // 创建4字节的缓冲区
|
||
binary.BigEndian.PutUint32(buf2, uint32(accountID))
|
||
|
||
//fmt.Printf("小端序: %v (十六进制: %x)\n", buf2, buf2) // 输出: [252 255 255 255] (0xFCFFFFFF)
|
||
ttid, _ := hex.DecodeString(tt)
|
||
//fmt.Println(bytes, "随机字节")
|
||
ret := append(buf2, ttid...)
|
||
ret = append(ret, bytes...)
|
||
|
||
return hex.EncodeToString(ret), tt, nil
|
||
// /t1.
|
||
// 以上过程只需全局一次,且应在生成ID之前完成。
|
||
}
|
||
func (s *LoginService) SetServerID(OnlineID uint16, Port uint16) error {
|
||
|
||
m := cool.DBM(s.Model).Where("online_id", OnlineID)
|
||
|
||
record, err := m.One()
|
||
if err != nil {
|
||
return err
|
||
}
|
||
if record == nil {
|
||
//说明是新的服务器
|
||
|
||
_, err := m.InsertAndGetId(&model.ServerList{OnlineID: OnlineID, Port: Port})
|
||
|
||
return err
|
||
}
|
||
var tttt model.ServerList
|
||
record.Struct(&tttt)
|
||
//t.Quit(int32(tttt.Port))
|
||
m.Data(&model.ServerList{OnlineID: OnlineID, Port: Port}).Where("online_id", OnlineID).Update()
|
||
|
||
return nil
|
||
|
||
}
|
||
func (s *LoginService) GetServerID(OnlineID uint16) (uint16, error) {
|
||
|
||
m := cool.DBM(s.Model).Where("online_id", OnlineID)
|
||
|
||
record, err := m.One()
|
||
if err != nil {
|
||
return 0, err
|
||
}
|
||
if record == nil {
|
||
//说明是新的服务器
|
||
|
||
return 0, fmt.Errorf("未找到服务器")
|
||
}
|
||
var tttt model.ServerList
|
||
record.Struct(&tttt)
|
||
|
||
return tttt.Port, nil
|
||
|
||
}
|