diff --git a/common/data/entity/BlazingI.go b/common/data/entity/BlazingI.go new file mode 100644 index 00000000..2404fe71 --- /dev/null +++ b/common/data/entity/BlazingI.go @@ -0,0 +1,5 @@ +package entity + +type Blazingservice interface { + Ret() []byte +} diff --git a/common/socket/handler/SocketHandler_Tomee.go b/common/socket/handler/SocketHandler_Tomee.go index 5f5c4c79..75965f37 100644 --- a/common/socket/handler/SocketHandler_Tomee.go +++ b/common/socket/handler/SocketHandler_Tomee.go @@ -21,6 +21,7 @@ type TomeeHeader struct { Result uint32 `json:"result"` Data []byte `json:"data" struc:"skip"` //组包忽略此字段// struc:"[0]pad" + Return []byte `struc:"[0]pad"` //返回记录 } func NewTomeeHeader() *TomeeHeader { @@ -113,6 +114,11 @@ func (h *TomeeHeader) Pack(data any) []byte { //组包 return by.Bytes() +} +func (h *TomeeHeader) Ret() []byte { //默认返回方法 + + return h.Return + } // MergeBytes 将多个字节数组合并为一个 diff --git a/logic/controller/controller.go b/logic/controller/controller.go index 470472d0..f86357f2 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -196,9 +196,25 @@ func Recv(c gnet.Conn, data handler.TomeeHeader) { params = append(params, ptrValue1, reflect.ValueOf(c)) } - ret := cmdlister.Call(params) + cmdlister.Call(params) - r := entity.Conn{c} - r.SendPack(ret[0].Interface().([]byte)) + r := entity.Conn{MainConn: c} + // // 遍历结构体字段 + // // fmt.Printf("结构体 %s 的字段信息:\n", t.Name()) + // for i := 0; i < ptrValue1.Type().NumField(); i++ { + // field := ptrValue1.Type().Field(i) + + // if field.Name == "Ret" { //判断Ret + + // } + + // } + t, ok := ptrValue1.Interface().(entity.Blazingservice) + + if ok { + r.SendPack(t.Ret()) + t.Ret() + } + //r.SendPack(ret[0].Interface().([]byte)) } diff --git a/logic/controller/getserver.go b/logic/controller/getserver.go index 4d9cd8ce..db0a10eb 100644 --- a/logic/controller/getserver.go +++ b/logic/controller/getserver.go @@ -2,21 +2,14 @@ package controller import ( "blazing/logic/service/server" + "fmt" "github.com/panjf2000/gnet/v2" ) // 处理命令: 105 -func (h Controller) GetServer(data server.SidInfo, c gnet.Conn) []byte { //这个时候player应该是空的 - - //fmt.Println(data.Sid) - - ret := server.NewCommendSvrInfo() - - ret.ServerList = server.GetServerInfoList() - - tt := data.Head.Pack(ret) - //fmt.Println(hex.EncodeToString(tt)) - // c.Write(tt) - return tt +func (h Controller) GetServer(data server.SidInfo, c gnet.Conn) { //这个时候player应该是空的 + t := data.Init() //初始化方法,然后可以返回默认返回值修改 + fmt.Println(t) + //return //TODO 这里待实现改成接口调用Ret方法 } diff --git a/logic/service/server/CommendSvrInfo.go b/logic/service/server/CommendSvrInfo.go index 5f71a37f..1fc7dbce 100644 --- a/logic/service/server/CommendSvrInfo.go +++ b/logic/service/server/CommendSvrInfo.go @@ -1,6 +1,7 @@ package server import ( + "blazing/common/socket/handler" "blazing/cool" "blazing/modules/base/service" "blazing/modules/blazing/model" @@ -8,8 +9,27 @@ import ( "github.com/butoften/array" ) +//var _ entity.Blazingservice = (*SidInfo)(nil) + +type SidInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化 + Head handler.TomeeHeader `cmd:"105" struc:"[0]pad"` //玩家登录 + + Sid []byte `struc:"[20]byte"` // 登录会话ID,固定长度16字节 + ret []byte `struc:"[0]pad"` + // NotLogin uint32 `error="10001"|struc:"[0]pad"` //返回错误码 ,不序列化,仅作为错误码 + // ErrorPassWord uint32 `struc:"[0]pad"` +} + +func (s SidInfo) Init() *commendSvrInfo { //默认返回方法 + r := newCommendSvrInfo() + r.ServerList = GetServerInfoList() + s.Head.Return = s.Head.Pack(r) //这里保存一下,用来给调用 + return r + +} + // CommendSvrInfo 初始连接请求信息结构体 -type CommendSvrInfo struct { +type commendSvrInfo struct { //Handler handler.TomeeHeader //` struc:"[0]pad"` //消息头 ,这里为传入的头部数据,遍历此头部实现解析CommendSvrInfo MaxOnlineID uint32 `struc:"sizeof=ServerList"` // 最大连接数 IsVip uint32 // 建议为0 @@ -21,8 +41,11 @@ type CommendSvrInfo struct { BlackInfo []BlackInfo // 黑名单id } -func NewCommendSvrInfo() *CommendSvrInfo { - return &CommendSvrInfo{ +// NewCommendSvrInfo 创建并返回一个新的 commendSvrInfo 结构体实例 +// 返回的实例包含初始化的 ServerList、FriendInfo 和 BlackInfo 切片 +// IsVip 和 ServerInfoLen 字段被初始化为 0 +func newCommendSvrInfo() *commendSvrInfo { + return &commendSvrInfo{ // Handler: handler.TomeeHeader{}, // MaxOnlineID: 100, IsVip: 0, diff --git a/logic/service/server/sid.go b/logic/service/server/sid.go deleted file mode 100644 index 9eda248f..00000000 --- a/logic/service/server/sid.go +++ /dev/null @@ -1,11 +0,0 @@ -package server - -import "blazing/common/socket/handler" - -type SidInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化 - Head handler.TomeeHeader `cmd:"105" struc:"[0]pad"` //玩家登录 - - Sid []byte `struc:"[20]byte"` // 登录会话ID,固定长度16字节 - // NotLogin uint32 `error="10001"|struc:"[0]pad"` //返回错误码 ,不序列化,仅作为错误码 - // ErrorPassWord uint32 `struc:"[0]pad"` -}