Files
bl/logic/service/player/server.go
昔念 600fc29cbd ```
refactor(socket): 统一使用 gnet.Conn 替代自定义 Conn 结构体

- 将 logic/controller 和 logic/service/player 中的 *player.Conn 替换为 gnet.Conn
- 移除 player.Conn 结构体及相关封装逻辑
- 调整 SendPack 方法至 Player 实体,直接操作 gnet.Conn 发送数据
- 增加 Mu 锁保护并发写入,确保 WebSocket 和 TCP 连接安全性
- 更新 ServerEvent.go 中跨域标记设置位置
```
2025-10-14 03:07:55 +08:00

55 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package player
import (
"blazing/common/socket/errorcode"
"github.com/panjf2000/gnet/v2"
)
func GetPlayer(c gnet.Conn, userid uint32) *Player { //TODO 这里待优化,可能存在内存泄漏问题
//检查player初始化是否为conn初始后取map防止二次连接后存在两个player
clientdata := c.Context().(*ClientData)
if clientdata.Player == nil {
clientdata.Player = NewPlayer(
WithConn(c), //注入conn
)
}
// gff := socket.NewClientData()
// gff.Player = clientdata.Player
// c.MainConn.SetContext(gff)
Mainplayer.Store(userid, clientdata.Player)
return clientdata.Player
// return nil
}
func KickPlayer(userid uint32) { //踢出玩家
//TODO 返回错误码
//var player *entity.Player
if player1, ok := Mainplayer.Load(userid); ok {
if player1.IsLogin {
//取成功,否则创建
//player1.Save() //先保存数据再返回
head := NewTomeeHeader(1001, userid)
head.Result = uint32(errorcode.ErrorCodes.ErrAccountLoggedInElsewhere)
//实际上这里有个问题,会造成重复保存问题
player1.MainConn.Context().(*ClientData).Mu.Lock()
player1.SendPack(head.Pack(nil))
player1.MainConn.Close()
player1.MainConn.Context().(*ClientData).Mu.Unlock()
// clientdata.Player = player
}
}
//return player
// return nil
}