diff --git a/common/data/entity/conn.go b/common/data/entity/conn.go index 33d8d6fcf..c177aaaf0 100644 --- a/common/data/entity/conn.go +++ b/common/data/entity/conn.go @@ -13,6 +13,9 @@ type Conn struct { MainConn gnet.Conn `struc:"[0]pad"` //TODO 不序列化,,序列化下面的作为blob存数据库 } +func NewConn(c gnet.Conn) *Conn { + return &Conn{MainConn: c} +} func (c *Conn) SendPack(bytes []byte) error { if c.MainConn.Context().(*ClientData).Getwsmsg().Upgraded { // This is the echo server diff --git a/logic/controller/controller.go b/logic/controller/controller.go index 81b831a06..662a3cdeb 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -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())) } - diff --git a/logic/controller/getserver.go b/logic/controller/getserver.go index d53cc6f88..a01fc41fa 100644 --- a/logic/controller/getserver.go +++ b/logic/controller/getserver.go @@ -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方法 } diff --git a/logic/controller/login.go b/logic/controller/login.go index f071b51e9..3c19d3627 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -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 } diff --git a/logic/controller/maphot.go b/logic/controller/maphot.go index 6efb91609..9a3ae467d 100644 --- a/logic/controller/maphot.go +++ b/logic/controller/maphot.go @@ -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 } diff --git a/logic/controller/systemtime.go b/logic/controller/systemtime.go index eaaec52ac..498aadbb4 100644 --- a/logic/controller/systemtime.go +++ b/logic/controller/systemtime.go @@ -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 } diff --git a/logic/service/SystemTime/System.go b/logic/service/SystemTime/System.go new file mode 100644 index 000000000..704746df1 --- /dev/null +++ b/logic/service/SystemTime/System.go @@ -0,0 +1,24 @@ +package SystemTime + +import ( + "blazing/common/socket/handler" + "time" +) + +// LoginSidInfo 登录携带的凭证结构体 +type InInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化 + Head handler.TomeeHeader `cmd:"1002" struc:"[0]pad"` //玩家登录 + +} + +// OutInfo 表示系统时间的出站消息 +type OutInfo struct { + SystemTime uint32 `json:"systemTime"` // 对应Java的@UInt long类型 +} + +// NewOutInfo 创建新的系统时间消息实例 +func NewOutInfo() *OutInfo { + return &OutInfo{ + SystemTime: uint32(time.Now().Unix()), // 获取当前时间戳(秒) + } +} diff --git a/logic/service/server/CommendSvrInfo.go b/logic/service/server/CommendSvrInfo.go index 8a853a95c..08b08175b 100644 --- a/logic/service/server/CommendSvrInfo.go +++ b/logic/service/server/CommendSvrInfo.go @@ -20,15 +20,8 @@ type SidInfo struct { //这里直接使用组合来实现将传入的原始头 // ErrorPassWord uint32 `struc:"[0]pad"` } -func (s *SidInfo) Def() []byte { //默认返回方法 - r := newCommendSvrInfo() - r.ServerList = GetServerInfoList() - return s.Head.Pack(r) //返回传参 - -} - // CommendSvrInfo 初始连接请求信息结构体 -type commendSvrInfo struct { +type CommendSvrInfo struct { //Handler handler.TomeeHeader //` struc:"[0]pad"` //消息头 ,这里为传入的头部数据,遍历此头部实现解析CommendSvrInfo MaxOnlineID uint32 `struc:"sizeof=ServerList"` // 最大连接数 IsVip uint32 // 建议为0 @@ -43,8 +36,8 @@ type commendSvrInfo struct { // NewCommendSvrInfo 创建并返回一个新的 commendSvrInfo 结构体实例 // 返回的实例包含初始化的 ServerList、FriendInfo 和 BlackInfo 切片 // IsVip 和 ServerInfoLen 字段被初始化为 0 -func newCommendSvrInfo() *commendSvrInfo { - return &commendSvrInfo{ +func NewCommendSvrInfo() *CommendSvrInfo { + return &CommendSvrInfo{ // Handler: handler.TomeeHeader{}, // MaxOnlineID: 100, IsVip: 0, diff --git a/logic/service/service.go b/logic/service/service.go index 53358a2de..f9deef8a9 100644 --- a/logic/service/service.go +++ b/logic/service/service.go @@ -60,7 +60,11 @@ func SetPlayer(c gnet.Conn, userid uint32) *entity.Player { //TODO 这里待优 // return nil } -type OutboundInfo interface { - error //实现错误接口 - Code() +/** + * @var type OutboundInf + * @global + */ +type OutInfo interface { + error //实现错误接口 + Code() errorcode.ErrorCode //返回错误码,如果error不等于nil就返回这个实现对前台传错误码 } diff --git a/logic/service/system/System.go b/logic/service/system/System.go deleted file mode 100644 index 8e6b94c3c..000000000 --- a/logic/service/system/System.go +++ /dev/null @@ -1,30 +0,0 @@ -package system - -import ( - "blazing/common/socket/handler" - "time" -) - -// LoginSidInfo 登录携带的凭证结构体 -type SystemTimeInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化 - Head handler.TomeeHeader `cmd:"1002" struc:"[0]pad"` //玩家登录 - -} - -func (s *SystemTimeInfo) Def()[]byte { //默认返回方法 - - return s.Head.Pack(NewSystemTimeOutboundInfo) //返回传参 - -} - -// SystemTimeOutboundInfo 表示系统时间的出站消息 -type SystemTimeOutboundInfo struct { - SystemTime uint32 `json:"systemTime"` // 对应Java的@UInt long类型 -} - -// NewSystemTimeOutboundInfo 创建新的系统时间消息实例 -func NewSystemTimeOutboundInfo() *SystemTimeOutboundInfo { - return &SystemTimeOutboundInfo{ - SystemTime: uint32(time.Now().Unix()), // 获取当前时间戳(秒) - } -}