Files
bl/common/socket/kick.go
xinian cdb7cec4ad
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
refactor: 移除冗余日志输出并优化日志处理
2026-02-02 18:32:41 +08:00

90 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package socket
import (
"blazing/common/socket/errorcode"
"blazing/logic/service/common"
"blazing/logic/service/player"
"blazing/modules/base/service"
"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
}
// 1. 创建结果通道
resultChan := make(chan error, 1)
// 2. 启动 goroutine 执行踢人操作
go func() {
err := player.KickPlayer(uint32(a))
resultChan <- err
}()
// 3. 用 select 监听结果和超时信号
select {
case err := <-resultChan:
// 正常完成
return err
case <-time.After(kickTimeout):
service.NewBaseSysLogService().RecordKick(uint32(a), fmt.Errorf("踢人操作超时(超时时间:%v", kickTimeout).Error())
// 超时触发,返回自定义或内置超时错误
return fmt.Errorf("踢人操作超时(超时时间:%v", kickTimeout)
}
}
// 参数不为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
}