1
This commit is contained in:
@@ -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是强制踢出
|
||||
|
||||
Reference in New Issue
Block a user