This commit is contained in:
昔念
2026-02-02 01:01:01 +08:00
parent 85a90d263a
commit 49bd303f47
6 changed files with 85 additions and 36 deletions

View File

@@ -5,6 +5,7 @@ import (
"blazing/cool"
"blazing/logic/service/common"
"blazing/logic/service/player"
"blazing/modules/base/service"
"context"
"fmt"
"time"
@@ -16,24 +17,45 @@ type Broadcast struct {
func (s *Server) Broadcast(t string) int {
cool.Logger.Info(context.TODO(), "全服广播", t)
var count int
player.Mainplayer.Range(func(key uint32, value *player.Player) bool {
count++
value.SendPackCmd(50003, &Broadcast{
Name: t,
})
return false
return true
})
return count
return player.Mainplayer.Count()
}
const kickTimeout = 5 * time.Second
func (s *Server) KickPerson(a int) error {
cool.Logger.Info(context.TODO(), "检测到踢人请求", a)
if a == 0 {
return nil
}
return player.KickPlayer(uint32(a))
// 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是强制踢出