refactor(logic): 重构逻辑处理和错误处理机制

- 新增 Conn 结构体的 NewConn 工厂方法
- 优化 Controller 中的 Recv 方法,增加错误处理逻辑
- 修改 GetServer、Login、MapHot 等方法的返回值类型
- 重构 SystemTimeInfo 方法,使用新的 OutInfo 接口
- 更新 CommendSvrInfo 结构体和相关方法
- 统一错误处理机制,使用新的 OutInfo 接口
This commit is contained in:
2025-07-25 22:50:08 +08:00
parent 487b25ac2f
commit 449552bea7
10 changed files with 73 additions and 76 deletions

View File

@@ -13,6 +13,7 @@ import (
"fmt"
"reflect"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gcmd"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/util/gconv"
@@ -96,10 +97,6 @@ func init() { //默认初始化扫描
glog.Warning(context.Background(), "方法参数必须是结构体", method.Name, "跳过注册")
continue
}
// 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
@@ -144,13 +141,10 @@ func getcmd(t reflect.Type) uint32 {
return gconv.Uint32(field.Tag.Get("cmd"))
}
// fmt.Printf(" 类型: %v\n", field.Type)
// fmt.Printf(" 标签: %q\n", field.Tag)
// 递归处理嵌套结构体
if field.Type.Kind() == reflect.Struct ||
(field.Type.Kind() == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct) {
fmt.Println(" 嵌套结构体字段:")
nestedType := field.Type
if nestedType.Kind() == reflect.Ptr {
nestedType = nestedType.Elem()
@@ -207,19 +201,26 @@ func Recv(c gnet.Conn, data handler.TomeeHeader) {
params = append(params, ptrValue1, reflect.ValueOf(c))
}
ret :=cmdlister.Call(params)
ret := cmdlister.Call(params)
r := entity.Conn{MainConn: c}
r := entity.NewConn(c) //这里实现新增客户端
if len(ret)<=0 {
if len(ret) <= 0 { //如果判断没有参数,那就说明这个包没有返回参数
return
}
a,ok:=ret[0].Interface().([]byte)
if ok {
r.SendPack(a)
aa, ok := ret[1].Interface().(service.OutInfo) //判断错误
if ok && aa != nil { //这里实现回复错误包
g.Log().Error(context.Background(), aa.Error(), aa.Code())
data.Result = uint32(aa.Code())
r.SendPack(data.Pack(nil))
return
}
r.SendPack(data.Pack(ret[0].Interface()))
}

View File

@@ -1,14 +1,17 @@
package controller
import (
"blazing/logic/service"
"blazing/logic/service/server"
"github.com/panjf2000/gnet/v2"
)
// 处理命令: 105
func (h Controller) GetServer(data *server.SidInfo, c gnet.Conn) { //这个时候player应该是空的
data.Def() //初始化方法,然后可以返回默认返回值修改
func (h Controller) GetServer(data *server.SidInfo, c gnet.Conn) (result *server.CommendSvrInfo, err service.OutInfo) { //这个时候player应该是空的
result = server.NewCommendSvrInfo()
result.ServerList = server.GetServerInfoList()
return
//return //TODO 这里待实现改成接口调用Ret方法
}

View File

@@ -4,13 +4,13 @@ import (
"blazing/common/data/share"
"blazing/logic/service"
"blazing/logic/service/login"
"time"
"blazing/logic/service/maps"
"github.com/panjf2000/gnet/v2"
)
// 处理命令: 1001
func (h *Controller) Login(data *login.LoginSidInfo, c gnet.Conn) []byte { //这个时候player应该是空的
func (h *Controller) Login(data *login.LoginSidInfo, c gnet.Conn) (result *maps.MapHotOutboundInfo, err service.OutInfo) { //这个时候player应该是空的
if tt := data.CheakSession(); tt { //说明sid正确
h.RPCClient.Kick(data.Head.UserID) //先踢人
@@ -20,11 +20,8 @@ func (h *Controller) Login(data *login.LoginSidInfo, c gnet.Conn) []byte { //这
share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器
t.CompleteLogin() //通知客户端登录成功
<-time.After(3000)
return data.Def()
c.Write(data.Def()) //TODO 这里实现fake数据
}
//data.Def()
//return //t1, _ := hex.DecodeString("000186A6683F89CF6E69656F0000000000000000000000000008000F00000000000000000000000000000000000000000000000000000001000001DB0000018B000000000000A8C000000000000000000000000000000000000000080001388000000001000000017FFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000000000000000000000000000000000064000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001FFFFFFFF000000004E4F4E4F0000000000000000000000000000000000000001000000010000000100000001000000010000000100000001000000000003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000100000064000000000000000000000000000000000000001F000000000000006400000000000093F4000093F4000000D5000000F7000000AD00000088000000920000008C0000009C00000000000000000000000000000000000000000000000000000004000027900000001B00004E6200000014000028380000002800004E3E0000002368493DC60000000000000000000000000000000000000000000100000000000000A937000007D1000186A600000000000186A66E69656F00000000000000000000000000000000000000000000000F0000000000000000000001DB0000018B0000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000001000000000000000000000000000000000000000000000000000000000000000000000000")
return nil
// return t1
return
}

View File

@@ -2,10 +2,11 @@ package controller
import (
"blazing/common/data/entity"
"blazing/logic/service"
"blazing/logic/service/maps"
)
func (h Controller) MapHot(data *maps.MapHotInboundInfo, c *entity.Player) (result *maps.MapHotOutboundInfo, err error) {
func (h Controller) MapHot(data *maps.MapHotInboundInfo, c *entity.Player) (result *maps.MapHotOutboundInfo, err service.OutInfo) {
data.Def()
result = &maps.MapHotOutboundInfo{
@@ -13,4 +14,5 @@ func (h Controller) MapHot(data *maps.MapHotInboundInfo, c *entity.Player) (resu
HotInfos: make([]maps.MapHotInfo, 0),
}
return
}

View File

@@ -2,11 +2,11 @@ package controller
import (
"blazing/common/data/entity"
"blazing/logic/service/system"
"blazing/logic/service"
"blazing/logic/service/SystemTime"
)
func (h Controller) SystemTimeInfo(data *system.SystemTimeInfo, c *entity.Player) {
data.Def()
//fmt.Println("登录成功")
//log.Printf("任务 %s 执行中,已登录状态: %v\n", , lw.IsLoggedIn())
func (h Controller) SystemTimeInfo(data *SystemTime.InInfo, c *entity.Player) (result *SystemTime.OutInfo, err service.OutInfo) {
result = SystemTime.NewOutInfo()
return
}