Files
bl/common/socket/kick.go
昔念 b25f033939
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
```
refactor(socket): 移除重复保存锁并优化panic错误处理

移除了ServerEvent.go中的sync.Once保存锁,因为可能存在重复保存问题,
同时将panic错误处理从fmt.Println改为使用cool.Logger.Error进行统一日志记录

feat(player): 优化踢人功能并添加超时机制

移除kick.go中的复杂异步超时逻辑
2026-02-02 23:11:14 +08:00

71 lines
1.3 KiB
Go

package socket
import (
"blazing/common/socket/errorcode"
"blazing/logic/service/common"
"blazing/logic/service/player"
"fmt"
"time"
)
type Broadcast struct {
Name string
}
func (s *Server) Broadcast(t string) int {
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
value.SendPackCmd(50003, &Broadcast{
Name: t,
})
return true
})
return player.Mainplayer.Count()
}
const kickTimeout = 5 * time.Second
func (s *Server) KickPerson(a int) error {
if a == 0 {
return nil
}
return player.KickPlayer(uint32(a))
}
// 参数不为0是强制踢出
func (s *Server) QuitSelf(a int) error {
//TODO 这里待退出
fmt.Println("检测到退出请求")
s.quit = true
if a != 0 {
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
value.Kick(1)
return false
})
} else {
go func() {
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
head := common.NewTomeeHeader(1001, value.Info.UserID)
head.Result = uint32(errorcode.ErrorCodes.ErrXinPlanSleepMode)
value.SendPack(head.Pack(nil))
return false
})
<-time.After(10 * time.Minute)
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
value.Kick(1)
return false
})
}()
}
return nil
}