fix(socket): 优化 TCP 连接处理和玩家昵称处理

- 在 ServerEvent.go 中增加 TCP 连接的特殊处理逻辑,防止缓冲区溢出
- 修改 CreatePlayer.go 中的昵称处理,去除多余的空格
- 优化 mapout.go 中的玩家离开地图通知逻辑
- 在 wscodec.go 中增加对 TCP 连接的识别和处理
This commit is contained in:
2025-09-13 00:42:39 +08:00
parent c70e9621e0
commit 910e866456
4 changed files with 21 additions and 8 deletions

View File

@@ -92,6 +92,11 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) {
}
ws := c.Context().(*service.ClientData).Wsmsg
if ws.Tcp { //升级失败时候防止缓冲区溢出
s.handleTcp(c)
return gnet.None
}
tt, len1 := ws.ReadBufferBytes(c)
if tt == gnet.Close {
@@ -99,7 +104,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) {
}
ok, action := ws.Upgrade(c)
if !ok {
if !ok { //升级失败,说明是tcp连接
s.handleTcp(c)
return gnet.None
} else {

View File

@@ -7,6 +7,7 @@ import (
"blazing/logic/service/login"
"blazing/logic/service/space"
blservice "blazing/modules/blazing/service"
"strings"
)
// 处理命令: 1001
@@ -17,18 +18,17 @@ func (h *Controller) CreatePlayer(data *login.CreatePlayerInboundInfo, c *servic
}
func (h *Controller) ChangePlayerName(data *login.ChangePlayerNameInboundInfo, c *service.Player) (result *login.ChangePlayerNameOutboundInfo, err errorcode.ErrorCode) {
newnice := cool.Filter.Replace(data.Nickname, '*')
newnice := cool.Filter.Replace(strings.Trim(data.Nickname, "\x00"), '*')
tt := login.ChangePlayerNameOutboundInfo{
c.Info.Nick = newnice
result = &login.ChangePlayerNameOutboundInfo{
Nickname: newnice,
UserID: c.ID(),
}
c.Info.Nick = newnice
space.GetSpace(c.MapID()).Range(func(playerID uint32, player service.PlayerI) bool {
defer space.GetSpace(c.MapID()).Range(func(playerID uint32, player service.PlayerI) bool {
player.SendPack(data.Head.Pack(&tt))
player.SendPack(data.Head.Pack(&result))
return true
})
return result, -1
return result, 0
}

View File

@@ -30,6 +30,7 @@ func LeaveMap(c service.PlayerI) {
space.GetSpace(c.MapID()).Range(func(playerID uint32, player service.PlayerI) bool {
player.SendPack(t.Pack(&LeaveMapOutboundInfo{UserID: c.ID()}))
return true
})
space.GetSpace(c.MapID()).Delete(c.ID())

View File

@@ -22,6 +22,7 @@ func NewConn(c gnet.Conn) *Conn {
}
type WsCodec struct {
Tcp bool
Upgraded bool // 链接是否升级
Buf bytes.Buffer // 从实际socket中读取到的数据缓存
wsMsgBuf wsMessageBuf // ws 消息缓存
@@ -43,6 +44,11 @@ func (w *WsCodec) Upgrade(c gnet.Conn) (ok bool, action gnet.Action) {
ok = true
return
}
if w.Tcp {
ok = false
return
}
buf := &w.Buf
tmpReader := bytes.NewReader(buf.Bytes())
oldLen := tmpReader.Len()
@@ -57,6 +63,7 @@ func (w *WsCodec) Upgrade(c gnet.Conn) (ok bool, action gnet.Action) {
buf.Next(skipN)
logging.Errorf("conn[%v] [err=%v]", c.RemoteAddr().String(), err.Error())
action = gnet.Close
w.Tcp = true
return
}
buf.Next(skipN)