diff --git a/common/socket/cmd/cmd.go b/common/socket/cmd/cmd.go deleted file mode 100644 index 027d4c39e..000000000 --- a/common/socket/cmd/cmd.go +++ /dev/null @@ -1,104 +0,0 @@ -package cmd - -import ( - "github.com/tnnmigga/enum" -) - -//TODO 实现自定义CMD,待删除 - -// Enum 辅助类型定义 -type EnumValue struct { - Value EnumCommandID - Name string -} -type EnumCommandID uint32 - -func Isexist(t any, value EnumCommandID) bool { - return enum.Contains(CommandID, value) -} - -// CommandID 消息命令ID注册表 -var CommandID = enum.New[struct { - // 在线相关命令 - Commend_OnLine EnumCommandID `enum:"105"` // 在线命令 - Login_In EnumCommandID `enum:"1001"` // 玩家登录 - System_Time EnumCommandID `enum:"1002"` // 返回当前时间戳 - Map_Hot EnumCommandID `enum:"1004"` // 显示地图热度(此地图内玩家数量) - Gold_Online_Check_Remain EnumCommandID `enum:"1106"` // 返回玩家金豆数量 - - // 地图相关命令 - Enter_Map EnumCommandID `enum:"2001"` // 告知后端玩家进入新地图 - Leave_Map EnumCommandID `enum:"2002"` // 玩家离开地图 - List_Map_Player EnumCommandID `enum:"2003"` // 返回当前地图玩家列表 - Map_Ogre_List EnumCommandID `enum:"2004"` // 精灵刷新 - - // 用户信息相关命令 - Get_Sim_UserInfo EnumCommandID `enum:"2051"` // 返回邮人物简单信息 - Get_More_UserInfo EnumCommandID `enum:"2052"` // 返回人物详细信息 - Change_Nick_Name EnumCommandID `enum:"2061"` // 修改玩家名字 - - // 动作相关命令 - People_Walk EnumCommandID `enum:"2101"` // 玩家走路包 - Chat EnumCommandID `enum:"2102"` // 公屏聊天 - Aimat EnumCommandID `enum:"2104"` // 射击 - - // 精灵相关命令 - Get_Pet_Info EnumCommandID `enum:"2301"` // 获取精灵详细信息 - Get_Pet_List EnumCommandID `enum:"2303"` // 获取所有的精灵列表 - Pet_Release EnumCommandID `enum:"2304"` // 精灵加入背包或放回仓库 - Pet_Show EnumCommandID `enum:"2305"` // 展示精灵 - Pet_Cure EnumCommandID `enum:"2306"` // 恢复精灵状态,NONO恢复所有精灵 - Pet_Study_Skill EnumCommandID `enum:"2307"` // 升级学习替换技能 - Pet_Default EnumCommandID `enum:"2308"` // 设置精灵首发 - Pet_One_Cure EnumCommandID `enum:"2310"` // 恢复精灵状态,精灵恢复单只精灵 - Pet_Skill_Switch EnumCommandID `enum:"2312"` // 切换精灵技能 - Pet_Set_Exp EnumCommandID `enum:"2318"` // 分配精灵经验 - Pet_Get_Exp EnumCommandID `enum:"2319"` // 获取积累经验 - Pet_Room EnumCommandID `enum:"2325"` // 跟随精灵获取信息 - Get_Soul_Bead_List EnumCommandID `enum:"2354"` // 返回元神珠信息 - - // 战斗相关命令 - Ready_To_Fight EnumCommandID `enum:"2404"` // 客户端通知服务端可以开始战斗, 此包表示客户端可以开始战斗, 无需服务端回复此包内容 - Use_Skill EnumCommandID `enum:"2405"` // 使用技能 - Change_Pet EnumCommandID `enum:"2407"` // 切换精灵 - Fight_NPC_Monster EnumCommandID `enum:"2408"` // 与野怪对战的申请进入战斗 - Catch_Monster EnumCommandID `enum:"2409"` // 捕捉精灵 - Challenge_Boss EnumCommandID `enum:"2411"` // 与当前地图的Boss类型野怪进入战斗 - Note_ReadyTo_Fight EnumCommandID `enum:"2503"` // 通知客户端已经可以开始战斗 - Note_Start_Fight EnumCommandID `enum:"2504"` // 在客户端告知服务端可以开始战斗后, 服务端回给客户端战斗开始 - Note_Use_Skill EnumCommandID `enum:"2505"` // 通知使用技能 - Fight_Over EnumCommandID `enum:"2506"` // 战斗结束 - Note_Update_Skill EnumCommandID `enum:"2507"` // 升级获得学习技能 - Note_Update_Prop EnumCommandID `enum:"2508"` // 返回升级后的信息 - - // 装备物品相关命令 - Change_Cloth EnumCommandID `enum:"2604"` // 修改玩家装备 - Item_List EnumCommandID `enum:"2605"` // 返回玩家物品列表 - - // 奖励相关命令 - Talk_Count EnumCommandID `enum:"2701"` // 玩家领取奖励的次数(挖矿,礼包等) - Talk_Cate EnumCommandID `enum:"2702"` // 领取奖品的内容 - Mail_Get_Unread EnumCommandID `enum:"2757"` // 返回邮件数量 - - // 系统相关命令 - System_Message EnumCommandID `enum:"8002"` // 后端主动发送面板消息 - Get_Boss_Monster EnumCommandID `enum:"8004"` // 返回战斗结束后的奖励包或主动发放奖励 - - // NONO相关命令 - Nono_Info EnumCommandID `enum:"9003"` // 通过米米号获取nono信息 - Nono_Follow_Or_Home EnumCommandID `enum:"9019"` // nono跟随或回家 - - // 特殊命令 - Get_Quadruple_Exe_Time EnumCommandID `enum:"50007"` // 返回已使用四倍剩余时间 - - // 暂未处理的包 - Item_Buy EnumCommandID `enum:"2601"` // 物品购买 - Item_Sale EnumCommandID `enum:"2602"` // 物品出售 - Friend_Add EnumCommandID `enum:"2151"` // 添加好友 - Friend_Remove EnumCommandID `enum:"2153"` // 移除好友 - Invite_To_Fight EnumCommandID `enum:"2401"` // 邀请战斗 - Escape_Fight EnumCommandID `enum:"2410"` // 逃离战斗 - Join_Game EnumCommandID `enum:"5001"` // 加入游戏 - Game_Over EnumCommandID `enum:"5002"` // 游戏结束 - Leave_Game EnumCommandID `enum:"5003"` // 离开游戏 -}]() diff --git a/common/socket/cmd/cmd_test.go b/common/socket/cmd/cmd_test.go deleted file mode 100644 index 58e3d0b07..000000000 --- a/common/socket/cmd/cmd_test.go +++ /dev/null @@ -1,14 +0,0 @@ -package cmd - -import ( - "testing" -) - -func BenchmarkCmd(b *testing.B) { - b.ReportAllocs() - //写入 - for i := 0; i < b.N; i++ { - b.Log(CommandID.Change_Cloth) - - } -} diff --git a/common/socket/handler/SocketHandler_Tomee.go b/common/socket/handler/SocketHandler_Tomee.go index 3c8fcc583..5f5c4c794 100644 --- a/common/socket/handler/SocketHandler_Tomee.go +++ b/common/socket/handler/SocketHandler_Tomee.go @@ -2,7 +2,7 @@ package handler import ( "blazing/common/serialize/bytearray" - "blazing/common/socket/cmd" + "bytes" "fmt" "reflect" @@ -13,10 +13,10 @@ import ( // TomeeHeader 结构体字段定义 type TomeeHeader struct { - Len uint32 `json:"len"` - Version string `json:"version" struc:"[1]byte"` - CMD cmd.EnumCommandID `json:"cmdId" struc:"uint32"` - UserID uint32 `json:"userId"` + Len uint32 `json:"len"` + Version string `json:"version" struc:"[1]byte"` + CMD uint32 `json:"cmdId" struc:"uint32"` + UserID uint32 `json:"userId"` //Error uint32 `json:"error" struc:"[0]pad"` Result uint32 `json:"result"` @@ -49,8 +49,8 @@ func (h *TomeeHandler) Handle(c gnet.Conn, data []byte) { //处理接收到的 tempdata := bytearray.CreateByteArray(data) header.Len, _ = tempdata.ReadUInt32() header.Version, _ = tempdata.ReadString(1) - _CMD, _ := tempdata.ReadUInt32() - header.CMD = cmd.EnumCommandID(_CMD) + header.CMD, _ = tempdata.ReadUInt32() + //header.CMD = cmd.EnumCommandID(_CMD) header.UserID, _ = tempdata.ReadUInt32() header.Result, _ = tempdata.ReadUInt32() @@ -114,3 +114,24 @@ func (h *TomeeHeader) Pack(data any) []byte { //组包 return by.Bytes() } + +// MergeBytes 将多个字节数组合并为一个 +func MergeBytes(arrays ...[]byte) []byte { + // 计算所有数组的总长度 + totalLen := 0 + for _, arr := range arrays { + totalLen += len(arr) + } + + // 创建结果切片 + result := make([]byte, totalLen) + + // 逐个复制数组内容 + currentIndex := 0 + for _, arr := range arrays { + copy(result[currentIndex:], arr) + currentIndex += len(arr) + } + + return result +} diff --git a/logic/controller/controller.go b/logic/controller/controller.go index 97c7479aa..7e1568cb4 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -3,7 +3,6 @@ package controller import ( "blazing/common/core" "blazing/common/data/entity" - "blazing/common/socket/cmd" "blazing/common/socket/handler" "blazing/cool" "blazing/logic/service" @@ -88,16 +87,18 @@ func init() { //默认初始化扫描 // 获取方法值 methodValue := value.MethodByName(method.Name) methodValue.Type().NumIn() - var func_cmd cmd.EnumCommandID + var func_cmd uint32 func_cmd = getcmd(methodValue.Type().In(0)) if func_cmd == 0 { //说明不是注册方法 + glog.Warning(context.Background(), "方法参数必须是结构体", method.Name, "跳过注册") continue } - if !cmd.Isexist(cmd.CommandID, cmd.EnumCommandID(func_cmd)) { - fmt.Println("ID方法存在cmd未注册", func_cmd) + // if !cmd.Isexist(cmd.CommandID, cmd.EnumCommandID(func_cmd)) { + // fmt.Println("ID方法存在cmd未注册", func_cmd) + + // } - } if cool.Config.PortBL == 0 && func_cmd > 1000 { //判断login服务器 break @@ -107,6 +108,7 @@ func init() { //默认初始化扫描 continue } + glog.Debug(context.Background(), "注册方法", func_cmd, method.Name) // fmt.Println(methodValue.Interface().(func(gnet.Conn, handler.TomeeHeader))) _, ok := core.Maincmdcache.LoadOrStore(func_cmd, methodValue) //TODO 待实现对不同用户初始化方法以取消全局cmdcache @@ -116,7 +118,7 @@ func init() { //默认初始化扫描 } } -func getcmd(t reflect.Type) cmd.EnumCommandID { +func getcmd(t reflect.Type) uint32 { // 处理指针类型 if t.Kind() == reflect.Ptr { t = t.Elem() // 获取指针指向的类型 @@ -124,7 +126,7 @@ func getcmd(t reflect.Type) cmd.EnumCommandID { // 确保是结构体 if t.Kind() != reflect.Struct { - fmt.Println("非结构体类型") + return 0 } @@ -137,7 +139,7 @@ func getcmd(t reflect.Type) cmd.EnumCommandID { if field.Type == reflect.TypeOf(handler.TomeeHeader{}) { // fmt.Println(reflect.ValueOf(field)) - return cmd.EnumCommandID(gconv.Uint32(field.Tag.Get("cmd"))) + return gconv.Uint32(field.Tag.Get("cmd")) } // fmt.Printf(" 类型: %v\n", field.Type)