fix(socket): 优化 TCP 连接处理和玩家昵称处理
- 在 ServerEvent.go 中增加 TCP 连接的特殊处理逻辑,防止缓冲区溢出 - 修改 CreatePlayer.go 中的昵称处理,去除多余的空格 - 优化 mapout.go 中的玩家离开地图通知逻辑 - 在 wscodec.go 中增加对 TCP 连接的识别和处理
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user