修改底层
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"blazing/common/socket/errorcode"
|
||||
|
||||
"blazing/cool"
|
||||
|
||||
"blazing/logic/service/player"
|
||||
@@ -10,14 +8,12 @@ import (
|
||||
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"github.com/gogf/gf/v2/os/gcmd"
|
||||
"github.com/gogf/gf/v2/os/glog"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/lunixbochs/struc"
|
||||
"github.com/panjf2000/gnet/v2"
|
||||
)
|
||||
|
||||
var Maincontroller = NewController() //注入service
|
||||
@@ -126,73 +122,3 @@ func getcmd(t reflect.Type) []uint32 {
|
||||
}
|
||||
return []uint32{0}
|
||||
}
|
||||
|
||||
// 遍历结构体方法并执行RECV_cmd
|
||||
func Recv(c gnet.Conn, data player.TomeeHeader) {
|
||||
|
||||
cmdlister, ok := cool.CmdCache.Load(data.CMD)
|
||||
if !ok {
|
||||
|
||||
glog.Debug(context.Background(), data.CMD, "cmd未注册")
|
||||
return //TODO 待实现cmd未注册
|
||||
}
|
||||
|
||||
// fmt.Println(cmdlister)
|
||||
glog.Debug(context.Background(), "接收数据", data.UserID, data.CMD)
|
||||
params := []reflect.Value{}
|
||||
|
||||
//funct := cmdlister.Type().NumIn()
|
||||
|
||||
// 如果需要可设置的变量(用于修改值),创建指针并解引用
|
||||
ptrValue := reflect.New(cmdlister.Type().In(0).Elem())
|
||||
|
||||
tt1 := ptrValue.Elem().Addr().Interface()
|
||||
// fmt.Println(tt1)
|
||||
err := struc.Unpack(bytes.NewBuffer(data.Data), tt1)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
//fmt.Println(tt1)
|
||||
ptrValue1 := ptrValue.Elem().Addr()
|
||||
// 设置 Name 字段
|
||||
nameField := ptrValue.Elem().Field(0) //首个为header
|
||||
if nameField.IsValid() && nameField.CanSet() {
|
||||
nameField.Set(reflect.ValueOf(data))
|
||||
}
|
||||
if cmdlister.Type().In(1) == reflect.TypeOf(&player.Player{}) {
|
||||
t := player.GetPlayer(c, data.UserID)
|
||||
// fmt.Println(data.CMD, "接收 变量的地址 ", &t.Info, t.Info.UserID)
|
||||
|
||||
|
||||
params = append(params, ptrValue1, reflect.ValueOf(t))
|
||||
} else {
|
||||
|
||||
params = append(params, ptrValue1, reflect.ValueOf(c))
|
||||
}
|
||||
|
||||
ret := cmdlister.Call(params)
|
||||
|
||||
if len(ret) <= 0 { //如果判断没有参数,那就说明这个包没有返回参数
|
||||
return
|
||||
}
|
||||
|
||||
aa, ok := ret[1].Interface().(errorcode.ErrorCode) //判断错误
|
||||
data.Result = uint32(aa)
|
||||
if aa == -1 {
|
||||
return
|
||||
|
||||
}
|
||||
t := player.GetPlayer(c, data.UserID)
|
||||
if ok && aa != 0 { //这里实现回复错误包
|
||||
|
||||
cool.Loger.Error(context.Background(), aa.Code())
|
||||
t.SendPack(data.Pack(nil))
|
||||
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
data.Version = "7"
|
||||
t.SendPack(data.Pack(ret[0].Interface()))
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user