refactor(socket): 移除重复保存锁并优化panic错误处理 移除了ServerEvent.go中的sync.Once保存锁,因为可能存在重复保存问题, 同时将panic错误处理从fmt.Println改为使用cool.Logger.Error进行统一日志记录 feat(player): 优化踢人功能并添加超时机制 移除kick.go中的复杂异步超时逻辑
This commit is contained in:
@@ -65,11 +65,7 @@ func (s *Server) OnClose(c gnet.Conn, err error) (action gnet.Action) {
|
||||
v, _ := c.Context().(*player.ClientData)
|
||||
v.LF.Close()
|
||||
if v.Player != nil {
|
||||
v.SaveL.Do(func() { //使用保存锁,确保在踢人和掉线的时候只保存一次
|
||||
|
||||
v.Player.Save() //保存玩家数据
|
||||
|
||||
})
|
||||
v.Player.Save() //保存玩家数据
|
||||
|
||||
}
|
||||
|
||||
@@ -110,7 +106,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) {
|
||||
if err := recover(); err != nil { // 恢复 panic,err 为 panic 错误值
|
||||
// 1. 打印错误信息
|
||||
|
||||
fmt.Println(context.TODO(), "panic 错误:", err)
|
||||
cool.Logger.Error(context.TODO(), "panic 错误:", err)
|
||||
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"blazing/common/socket/errorcode"
|
||||
"blazing/logic/service/common"
|
||||
"blazing/logic/service/player"
|
||||
"blazing/modules/base/service"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
@@ -34,25 +33,7 @@ func (s *Server) KickPerson(a int) error {
|
||||
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)
|
||||
}
|
||||
return player.KickPlayer(uint32(a))
|
||||
}
|
||||
|
||||
// 参数不为0是强制踢出
|
||||
|
||||
Reference in New Issue
Block a user