```
refactor(controller): 重构控制器代码结构并优化战斗状态检查 - 添加包级注释说明controller包的功能和架构设计 - 重命名Controller结构体注释,使其更清晰明了 - 添加ParseCmd函数的
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user