diff --git a/common/socket/kick.go b/common/socket/kick.go index 9a1eeb5e6..7ef979c2b 100644 --- a/common/socket/kick.go +++ b/common/socket/kick.go @@ -44,7 +44,7 @@ func (s *Server) QuitSelf(a int) error { s.quit = true if a != 0 { player.Mainplayer.Range(func(key uint32, value *player.Player) bool { - value.Kick(1) + value.KickMessage() return false }) } else { @@ -60,7 +60,7 @@ func (s *Server) QuitSelf(a int) error { <-time.After(10 * time.Minute) player.Mainplayer.Range(func(key uint32, value *player.Player) bool { - value.Kick(1) + value.Kick() return false }) }() diff --git a/logic/main.go b/logic/main.go index cd5473b03..f4288c244 100644 --- a/logic/main.go +++ b/logic/main.go @@ -38,7 +38,7 @@ func cleanup() { log.Println("执行优雅清理资源...") player.Mainplayer.Range(func(key uint32, value *player.Player) bool { - value.Kick(1) + value.Kick() return false }) diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 6dfbc456f..e2bd1ed71 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -223,22 +223,17 @@ func (p *Player) ItemAdd(ItemId, ItemCnt uint32) (result bool) { return false } - -func (player1 *Player) Kick(qtype int) { +func (player1 *Player) Kick() { if player1.Info == nil { return } - // 取成功,否则创建 - // player1.Save() //先保存数据再返回 + head := common.NewTomeeHeader(1001, player1.Info.UserID) head.Result = uint32(errorcode.ErrorCodes.ErrXinPlanSleepMode) // 实际上这里有个问题,会造成重复保存问题 player1.SendPack(head.Pack(nil)) - if qtype == 1 { - return - } CloseChan := make(chan struct{}) @@ -260,6 +255,22 @@ func (player1 *Player) Kick(qtype int) { } } +// 1是延迟踢人,0是强制踢人 +func (player1 *Player) KickMessage() { + if player1.Info == nil { + return + } + // 取成功,否则创建 + // player1.Save() //先保存数据再返回 + head := common.NewTomeeHeader(1001, player1.Info.UserID) + + head.Result = uint32(errorcode.ErrorCodes.ErrXinPlanSleepMode) + // 实际上这里有个问题,会造成重复保存问题 + + player1.SendPack(head.Pack(nil)) + +} + func (p *Player) Cheak(b error) { if b != nil { g.Log().Error(context.Background(), "出现错误", p.Info.UserID, b.Error()) diff --git a/logic/service/player/server.go b/logic/service/player/server.go index 624371b51..918250590 100644 --- a/logic/service/player/server.go +++ b/logic/service/player/server.go @@ -34,7 +34,7 @@ func KickPlayer(userid uint32) error { //踢出玩家 //TODO 返回错误码 //var player *entity.Player if player1, ok := Mainplayer.Load(userid); ok { - player1.Kick(0) + player1.Kick() }