diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index b8c4356b2..046e1ba59 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -56,8 +56,6 @@ func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) { v, _ := c.Context().(*player.ClientData) s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 - v.Lf.Close() //关闭lockfree - if v.Player != nil { //cool.Loger.Info(context.TODO(), "准备保存", v.Player.Info.UserID) v.Player.Save() //保存玩家数据 @@ -152,10 +150,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) { t := c.Context().(*player.ClientData) //client := conn.RemoteAddr().String() err = s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 - err = t.Lf.Producer().Write(msg.Payload) - if err != nil { - panic(err) - } + t.OnEvent(msg.Payload) }) @@ -186,10 +181,7 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) { t := conn.Context().(*player.ClientData) err = s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 - err = t.Lf.Producer().Write(data) - if err != nil { - panic(err) - } + t.OnEvent(data) }) diff --git a/logic/service/player/SocketHandler_Tomee.go b/logic/service/player/SocketHandler_Tomee.go index 7f186f470..f79354efd 100644 --- a/logic/service/player/SocketHandler_Tomee.go +++ b/logic/service/player/SocketHandler_Tomee.go @@ -133,7 +133,7 @@ func Recv(c gnet.Conn, data TomeeHeader) { } // fmt.Println(cmdlister) - glog.Debug(context.Background(), "接收数据", data.UserID, data.CMD) + //glog.Debug(context.Background(), "接收数据", data.UserID, data.CMD) params := []reflect.Value{} //funct := cmdlister.Type().NumIn() @@ -182,7 +182,7 @@ func Recv(c gnet.Conn, data TomeeHeader) { return } - t := GetPlayer(c, data.UserID) + t := clientdata.Player if t == nil { return } diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 2ff08cd50..5058091ce 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -25,7 +25,6 @@ import ( "time" "github.com/antlabs/timer" - "github.com/bruceshao/lockfree" "github.com/gobwas/ws" "github.com/gobwas/ws/wsutil" "github.com/gogf/gf/v2/frame/g" @@ -55,45 +54,25 @@ type ClientData struct { Mu sync.Mutex ERROR_CONNUT int Wsmsg *WsCodec - Lf *lockfree.Lockfree[[]byte] + Conn gnet.Conn CloseChan chan struct{} } func NewClientData(c gnet.Conn) *ClientData { // 创建事件处理器 - handler := &eventHandler{ - Conn: c, - } - lfs := lockfree.NewConditionBlockStrategy() - // 创建消费端串行处理的Lockfree - lf := lockfree.NewLockfree[[]byte]( - 4096, - handler, - lfs, - ) - // 启动Lockfree - if err := lf.Start(); err != nil { - panic(err) - } cd := ClientData{ IsCrossDomain: false, Player: nil, - Lf: lf, - - Wsmsg: &WsCodec{}, + Conn: c, + Wsmsg: &WsCodec{}, } return &cd } -type eventHandler struct { - Callback func(conn gnet.Conn, data TomeeHeader) - Conn gnet.Conn -} - -func (h *eventHandler) OnEvent(v []byte) { +func (h *ClientData) OnEvent(v []byte) { defer func() { if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值 // 1. 打印错误信息 @@ -409,6 +388,7 @@ func (p *Player) Save() { } if p.FightC != nil { + go p.FightC.Over(p, info.BattleOverReason.PlayerOffline) //玩家逃跑,但是不能锁线程 }