Files
bl/modules/config/service/server.go
昔念 79d4343cdc
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
```
feat(common/cool): 更新GetClient函数支持端口参数

更新GetClient函数签名以接收端口参数,并修改客户端映射键的计算方式,
添加GetClientOnly函数用于仅通过uid获取客户端。

fix(common/rpc): 修复RPC调用中的客户端获取方法

将GetClient调用替换为GetClientOnly,确保正确的客户端获取逻辑。

refactor(logic/controller): 重命名Port字段为UID并优化道具列表处理

将Controller结构体中的Port字段重命名为UID以更好地反映其用途,
优化GetUserItemList函数中道具列表的初始化和填充逻辑。

perf(logic): 调整性能分析web服务启动位置

将PprofWeb服务从全局启动移至调试模式下启动,优化服务配置。

refactor(logic/server): 更新服务器UID生成逻辑

修改Maincontroller的UID字段设置方式,使用服务器ID和端口组合生成唯一标识。

refactor(logic/service/player): 移除未使用的导入并优化怪物生成

移除未使用的service导入,优化怪物生成逻辑中的地图数据访问。

feat(logic/service/space): 添加PitS缓存映射并重构空间初始化

添加新的PitS字段
2026-03-02 23:59:15 +08:00

184 lines
3.9 KiB
Go

package service
import (
"blazing/common/utils"
"blazing/cool"
"blazing/modules/config/model"
"fmt"
"sort"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"github.com/qiniu/go-sdk/v7/auth/qbox"
"github.com/qiniu/go-sdk/v7/storage"
)
type ServerService struct {
*cool.Service
manager *storage.BucketManager
bucket string
}
func NewServerService() *ServerService {
cf := &ServerService{
Service: &cool.Service{
Model: model.NewServerList(),
PageQueryOp: &cool.QueryOp{
ModifyResult: func(ctx g.Ctx, data interface{}) interface{} {
var rr []g.MapStrAny
r, _ := gconv.Map(data)["list"].(gdb.Result)
for i := 0; i < len(r); i++ {
t, ok := cool.GetClient(gconv.Uint32(r[i].Map()["online_id"]), gconv.Uint32(r[i].Map()["port"]))
// tt.Friends = v.Friends
subm := r[i].GMap()
if ok {
err := t.KickPerson(0) //实现指定服务器踢人
if err == nil {
r, _ := utils.TcpPing(fmt.Sprintf("%s:%d", r[i].Map()["ip"], r[i].Map()["port"]))
subm.Set("isonline", r)
} else {
subm.Set("isonline", 0)
}
} else {
subm.Set("isonline", 0)
}
rr = append(rr, subm.MapStrAny())
}
data.(map[string]interface{})["list"] = rr
return data
},
},
},
}
cfg := storage.Config{
Zone: &storage.ZoneHuadong,
UseHTTPS: true,
UseCdnDomains: true,
}
mac := qbox.NewMac("DzMpomnPxqBHkIcvxTbC-hl_8LjVB0LXZuhCky_u", "bhoxrpG1s7MBmSS2I1k5t9zMpuiderpBDZoIPQKU")
cf.bucket = "blazingt"
cf.manager = storage.NewBucketManager(mac, &cfg)
return cf
}
func (s *ServerService) GetPort(DepartmentID uint) gdb.List {
var res gdb.Result
m := cool.DBM(s.Model).Where("is_open", 1).Fields("ip", "port", "online_id", "is_vip", "name")
if DepartmentID != 1 {
res, _ = m.All()
} else {
res, _ = m.Where("is_debug", 0).All()
}
return res.List()
}
func (s *ServerService) GetServer() []model.ServerList {
var item []model.ServerList
cool.DBM(s.Model).Scan(&item)
return item
}
func (s *ServerService) StartUPdate(OnlineID uint16, isinstall int) model.ServerList {
m := cool.DBM(s.Model).Where("online_id", OnlineID)
var tttt model.ServerList
m.Scan(&tttt)
if isinstall == 1 {
tttt.IsOpen = uint8(0)
m.Save(tttt)
}
// s.CleanCache()
return tttt
}
func (s *ServerService) SetServerID(OnlineID uint32, Port uint32) error {
m := cool.DBM(s.Model).Where("online_id", OnlineID)
var tttt model.ServerList
m.Scan(&tttt)
tttt.Port = Port
tttt.OnlineID = OnlineID
tttt.IsOpen = 1
m.Save(tttt)
// s.CleanCache()
return nil
}
func (s *ServerService) GetServerID(OnlineID uint32) model.ServerList {
var tttt model.ServerList
cool.DBM(s.Model).Where("online_id", OnlineID).Scan(&tttt)
return tttt
}
// 保存版本号
func (s *ServerService) SetServerScreen(id uint32, name string) {
cool.DBM(s.Model).Where("online_id", id).Data("old_screen", name).Update()
}
func (s *ServerService) GetFile() string {
var files []File
prefix := "logic"
delimiter := "" // 用于分隔目录
marker := "" // 初始标记为空
for {
entries, _, nextMarker, hasNext, err := s.manager.ListFiles(s.bucket, prefix, delimiter, marker, 100)
if err != nil {
return ""
}
// 添加文件到结果列表
for _, entry := range entries {
files = append(files, File{
Name: entry.Key,
Size: entry.Fsize,
Path: entry.Key,
Time: entry.PutTime,
})
}
// 如果没有更多文件,结束循环
if !hasNext {
break
}
// 更新标记,继续下一页
marker = nextMarker
}
sort.Slice(files, func(i, j int) bool {
return files[i].Time > files[j].Time
})
return files[0].Name
}
type File struct {
Name string `json:"name"`
Path string `json:"path"`
Url string `json:"url"`
Size int64 `json:"size"`
Modified string `json:"modified"`
Time int64 `json:"time"`
}