```
fix(player): 修复玩家发送数据包时的空指针异常 - 将 `ClientData` 中的 `sync.Mutex` 替换为 `sync.RWMutex` 以支持读写锁 - 在 `ServerEvent.go` 中添加读锁保护对客户端数据的访问 - 增加对 `MainConn` 及其上下文是否存在判断,防止空指针引用 ```
This commit is contained in:
@@ -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()
|
||||
|
||||
})
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user