diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index c1232a97f..3e50794e3 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -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 { diff --git a/logic/controller/CreatePlayer.go b/logic/controller/CreatePlayer.go index bb98117e2..575b223ab 100644 --- a/logic/controller/CreatePlayer.go +++ b/logic/controller/CreatePlayer.go @@ -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 } diff --git a/logic/service/maps/mapout.go b/logic/service/maps/mapout.go index 8424e422a..93dc6139f 100644 --- a/logic/service/maps/mapout.go +++ b/logic/service/maps/mapout.go @@ -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()) diff --git a/logic/service/wscodec.go b/logic/service/wscodec.go index c975a3e53..5c984b543 100644 --- a/logic/service/wscodec.go +++ b/logic/service/wscodec.go @@ -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)