Files
bl/logic/service/space/in_out.go
昔念 40b4d5955e ```
refactor(socket): 使用fmt.Println替换Logger.Error处理panic

修复socket连接关闭和流量处理中的panic恢复机制,
使用fmt.Println直接打印错误信息替代原有的Logger组件。

---

refactor(timer): 移除ants协程池依赖并优化错误处理

移除timer模块中对ants协程池的依赖,改用原生goroutine,
添加panic恢复机制确保任务执行的稳定性。

---

feat(player): 移除CountPlayer函数

删除玩家服务中统计在线玩家数量的功能函数,
该功能
2026-01-29 01:13:32 +08:00

100 lines
2.1 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 space
import (
"blazing/logic/service/common"
"blazing/logic/service/space/info"
"sync/atomic"
"github.com/jinzhu/copier"
"golang.org/x/time/rate"
)
// 向其他人广播,不含自己
// 广播是c为空就不特判发给全体成员广播
func (s *Space) Broadcast(c common.PlayerI, cmd uint32, data any) {
s.User.Range(func(k uint32, v common.PlayerI) (stop bool) {
if c != nil {
if k != c.GetInfo().UserID {
v.SendPackCmd(cmd, data)
}
} else {
v.SendPackCmd(cmd, data)
}
return false
})
}
func (s *Space) LeaveMap(c common.PlayerI) {
if atomic.CompareAndSwapUint32(&s.Owner.UserID, c.GetInfo().UserID, 0) {
s.Owner.Reset()
s.Broadcast(c, 2419, &s.Owner)
}
s.Broadcast(c, 2002, &info.LeaveMapOutboundInfo{UserID: c.GetInfo().UserID})
s.User.Delete(c.GetInfo().UserID)
s.UserInfo.Delete(c.GetInfo().UserID)
current, ok := maphot[s.Super]
if ok && *current > 0 {
atomic.AddInt32(maphot[s.Super], -1)
}
}
func (s *Space) EnterMap(c common.PlayerI) {
out := info.NewOutInfo()
copier.CopyWithOption(out, c.GetInfo(), copier.Option{DeepCopy: true})
s.User.Store(c.GetInfo().UserID, c)
s.UserInfo.Store(c.GetInfo().UserID, *out)
s.Broadcast(c, 2001, out)
_, ok := maphot[s.Super]
if ok {
atomic.AddInt32(maphot[s.Super], 1)
}
}
func (s *Space) GetInfo(c common.PlayerI) []info.SimpleInfo {
if atomic.LoadUint32(&s.TimeBoss.Flag) == 1 {
defer c.SendPackCmd(2022, &s.TimeBoss)
}
if s.MapBossInfo.Pos != 200 {
var t info.MapBossSInfo
t.INFO = append(t.INFO, s.MapBossInfo)
s.Broadcast(nil, 2021, &t)
}
defer c.SendPackCmd(50004, &info.S2C_50004{Id: uint32(s.Weather)}) //获取天气
ret := make([]info.SimpleInfo, 0)
s.UserInfo.Range(func(k uint32, v info.SimpleInfo) (stop bool) {
ret = append(ret, v)
return len(ret) > 30
})
return ret
}
var limiter = rate.NewLimiter(rate.Limit(10), 5)
func (s *Space) Walk(c common.PlayerI, info *info.WalkOutInfo) {
// cool.Limiter.Take()
//r := cool.Limiter.Get("Broadcast"+gconv.String(mapid), rate.Limit(10), 5)
if !limiter.Allow() {
return
}
s.Broadcast(c, 2101, info)
}