refactor(controller): 重构控制器代码结构并优化战斗状态检查

- 添加包级注释说明controller包的功能和架构设计
- 重命名Controller结构体注释,使其更清晰明了
- 添加ParseCmd函数的
This commit is contained in:
2025-12-23 10:46:17 +08:00
parent 83ee9fba43
commit 9baca27033
11 changed files with 195 additions and 150 deletions

View File

@@ -1,3 +1,6 @@
// Package controller 提供游戏逻辑的控制器层,负责处理各种游戏功能的请求分发。
// 包含用户、宠物、战斗、物品、地图、任务等各个模块的控制器方法。
// 通过反射和标签系统自动注册 cmd 处理方法,实现请求到处理函数的映射。
package controller
import (
@@ -18,7 +21,7 @@ import (
var Maincontroller = &Controller{} //注入service
// 分发cmd逻辑实现Controller
// Controller 分发cmd逻辑实现
type Controller struct {
Port uint16
RPCClient struct {
@@ -28,8 +31,11 @@ type Controller struct {
}
}
// ParseCmd 将字节数组数据解析到指定类型的变量中
// 该函数使用struc库进行数据解包操作
func ParseCmd[T any](a T, data []byte) T {
// := info.NewLoginSidInfo()
// 使用struc.Unpack将字节数据解包到变量a中
struc.Unpack(bytes.NewBuffer(data), &a)
return a
//fmt.Println(pinfo)
@@ -52,31 +58,31 @@ func Init(isgame bool) { //默认初始化扫描
//fmt.Println("找到注册方法", method.Name)
methodValue.Type().NumIn()
for _, func_cmd := range getCmd(methodValue.Type().In(0)) {
if func_cmd == 0 { //说明不是注册方法
for _, funcCmd := range getCmd(methodValue.Type().In(0)) {
if funcCmd == 0 { //说明不是注册方法
glog.Warning(context.Background(), "方法参数必须包含CMD参数", method.Name, "跳过注册")
continue
}
if !isgame && func_cmd > 1000 { //判断login服务器
if !isgame && funcCmd > 1000 { //判断login服务器
continue
}
if isgame && func_cmd < 1000 { //判断login服务器
if isgame && funcCmd < 1000 { //判断login服务器
continue
}
glog.Debug(context.Background(), "注册方法", func_cmd, method.Name)
glog.Debug(context.Background(), "注册方法", funcCmd, method.Name)
_, ok := cool.CmdCache.LoadOrStore(func_cmd, cool.Cmd{
_, ok := cool.CmdCache.LoadOrStore(funcCmd, cool.Cmd{
Func: methodValue,
Req: methodValue.Type().In(0).Elem(),
// Res: ,
}) //TODO 待实现对不同用户初始化方法以取消全局cmdcache
if ok { //方法已存在init
glog.Error(context.Background(), "方法已存在init,不会初始化后面的方法", func_cmd)
glog.Error(context.Background(), "方法已存在init,不会初始化后面的方法", funcCmd)
}
}