Files
bl/modules/blazing/service/login.go
昔念 7a8be1c23a feat(element): 优化元素计算器并发安全与缓存机制
- 使用 sync.Map 替代 map+锁,提升并发读写性能
- 预加载所有元素组合,避免运行时重复创建
- 攻击系数计算结果加入缓存,提高查询效率
- 完善缓存键命名与错误处理机制
- 调整元素组合字符串展示格式,增强可读性

fix(item): 修复购买物品时价格为0仍扣除金币的问题

- 在购买逻辑中增加对物品价格是否为0的判断
- 防止免费物品被误扣金币
2025-11-02 23:52:06 +08:00

97 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}