diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index d56ba6b7..57f61d44 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -151,7 +151,9 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) { t := c.Context().(*player.ClientData) //client := conn.RemoteAddr().String() s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复 + t.Mu.RLock() t.OnEvent(msg.Payload) + t.Mu.RUnlock() }) diff --git a/logic/service/player/SocketHandler_Tomee.go b/logic/service/player/SocketHandler_Tomee.go index 534db64b..a9e695d3 100644 --- a/logic/service/player/SocketHandler_Tomee.go +++ b/logic/service/player/SocketHandler_Tomee.go @@ -199,7 +199,7 @@ func (h *ClientData) Recv(data TomeeHeader) { type ClientData struct { IsCrossDomain bool //是否跨域过 Player *Player //客户实体 - Mu sync.Mutex + Mu sync.RWMutex ERROR_CONNUT int Wsmsg *WsCodec Conn gnet.Conn diff --git a/logic/service/player/player.go b/logic/service/player/player.go index d7e5458e..86a50576 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -106,7 +106,15 @@ func (p *Player) SpawnMonsters() { } func (p *Player) SendPack(b []byte) error { - return p.MainConn.Context().(*ClientData).SendPack(b) + if p.MainConn == nil { + return nil + } + _, ok := p.MainConn.Context().(*ClientData) + if ok { + return p.MainConn.Context().(*ClientData).SendPack(b) + } + + return nil }