90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
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
|
||
}
|