diff --git a/common/data/entity/player.go b/common/data/entity/player.go index 7900231b..3497f5a8 100644 --- a/common/data/entity/player.go +++ b/common/data/entity/player.go @@ -1,13 +1,10 @@ package entity import ( - "context" "fmt" "sync" "time" - - "github.com/panjf2000/gnet/v2" ) type Player struct { @@ -28,9 +25,9 @@ func WithUserID(userID uint32) PlayerOption { p.UserID = userID } } -func WithConn(c gnet.Conn) PlayerOption { +func WithConn(c Conn) PlayerOption { return func(p *Player) { - p.MainConn = Conn{MainConn: c} + p.MainConn = c } } @@ -54,8 +51,6 @@ func (p *Player) SendPack(b []byte) error { return err } - - // IsLoggedIn 检查是否已登录 func (lw *Player) IsLoggedIn() bool { lw.mu.Lock() diff --git a/common/socket/handler/SocketHandler_Tomee.go b/common/socket/handler/SocketHandler_Tomee.go index 88dc8742..5d616e27 100644 --- a/common/socket/handler/SocketHandler_Tomee.go +++ b/common/socket/handler/SocketHandler_Tomee.go @@ -1,6 +1,7 @@ package handler import ( + "blazing/common/data/entity" "blazing/common/utils/bytearray" "bytes" @@ -34,7 +35,7 @@ func NewTomeeHeader() *TomeeHeader { } type TomeeHandler struct { - Callback func(conn gnet.Conn, data TomeeHeader) + Callback func(conn *entity.Conn, data TomeeHeader) } func NewTomeeHandler() *TomeeHandler { @@ -57,7 +58,7 @@ func (h *TomeeHandler) Handle(c gnet.Conn, data []byte) { //处理接收到的 header.Result, _ = tempdata.ReadUInt32() header.Data = tempdata.BytesAvailable() //fmt.Println("接收封包", header) - h.Callback(c, header) + h.Callback( entity.NewConn(c), header) //return header } @@ -116,7 +117,6 @@ func (h *TomeeHeader) Pack(data any) []byte { //组包 } - // var _ Blazingservice = (*TomeeHeader)(nil) // type Blazingservice interface { diff --git a/logic/controller/controller.go b/logic/controller/controller.go index fb77b699..bf9006fd 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -18,7 +18,6 @@ import ( "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 @@ -160,7 +159,7 @@ func getcmd(t reflect.Type) uint32 { } // 遍历结构体方法并执行RECV_cmd -func Recv(c gnet.Conn, data handler.TomeeHeader) { +func Recv(c *entity.Conn, data handler.TomeeHeader) { cmdlister, ok := cool.CmdCache.Load(data.CMD) if !ok { @@ -209,7 +208,7 @@ func Recv(c gnet.Conn, data handler.TomeeHeader) { if len(ret) <= 0 { //如果判断没有参数,那就说明这个包没有返回参数 return } - r := entity.NewConn(c) //这里实现新增客户端 + aa, ok := ret[1].Interface().(service.OutInfo) //判断错误 if ok && aa != nil { //这里实现回复错误包 @@ -217,11 +216,11 @@ func Recv(c gnet.Conn, data handler.TomeeHeader) { g.Log().Error(context.Background(), aa.Error(), aa.Code()) data.Result = uint32(aa.Code()) - r.SendPack(data.Pack(nil)) + c.SendPack(data.Pack(nil)) return } - r.SendPack(data.Pack(ret[0].Interface())) + c.SendPack(data.Pack(ret[0].Interface())) } diff --git a/logic/controller/login.go b/logic/controller/login.go index a4a720f1..189c79d6 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -5,12 +5,10 @@ import ( "blazing/common/data/share" "blazing/logic/service" "blazing/logic/service/login" - - "github.com/panjf2000/gnet/v2" ) // 处理命令: 1001 -func (h *Controller) Login(data *login.InInfo, c gnet.Conn) (result *login.OutInfo, err service.OutInfo) { //这个时候player应该是空的 +func (h *Controller) Login(data *login.InInfo, c *entity.Conn) (result *login.OutInfo, err service.OutInfo) { //这个时候player应该是空的 if tt := data.CheakSession(); tt { //说明sid正确 h.RPCClient.Kick(data.Head.UserID) //先踢人 @@ -21,8 +19,8 @@ func (h *Controller) Login(data *login.InInfo, c gnet.Conn) (result *login.OutIn share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器 t.CompleteLogin() //通知客户端登录成功 - r := entity.NewConn(c) //这里实现新增客户端 - r.SendPack(data.Def()) + + c.SendPack(data.Def()) } else { err = &login.LoginErr{} diff --git a/logic/service/service.go b/logic/service/service.go index f9deef8a..e90ca701 100644 --- a/logic/service/service.go +++ b/logic/service/service.go @@ -5,15 +5,13 @@ import ( "blazing/common/socket/errorcode" "blazing/common/socket/handler" "blazing/cool" - - "github.com/panjf2000/gnet/v2" ) -func GetPlayer(c gnet.Conn, userid uint32) *entity.Player { //TODO 这里待优化,可能存在内存泄漏问题 +func GetPlayer(c *entity.Conn, userid uint32) *entity.Player { //TODO 这里待优化,可能存在内存泄漏问题 //检查player初始化,是否为conn初始后取map,防止二次连接后存在两个player - clientdata := c.Context().(*entity.ClientData) + clientdata := c.MainConn.Context().(*entity.ClientData) if clientdata.GetPlayer() != nil { return clientdata.GetPlayer() } @@ -44,13 +42,13 @@ func KickPlayer(userid uint32) { //踢出玩家 //return player // return nil } -func SetPlayer(c gnet.Conn, userid uint32) *entity.Player { //TODO 这里待优化, +func SetPlayer(c *entity.Conn, userid uint32) *entity.Player { //TODO 这里待优化, - clientdata := c.Context().(*entity.ClientData) + clientdata := c.MainConn.Context().(*entity.ClientData) player := entity.NewPlayer( entity.WithUserID(userid), //注入ID - entity.WithConn(c), //注入conn + entity.WithConn(*c), //注入conn ) cool.Mainplayer.Store(userid, player)