refactor(entity): 重构 ClientData 结构体并添加同步锁
- 在 ClientData 中添加 sync.Mutex 以确保并发安全 - 实现 SetPlayer 和 GetPlayer 等方法来封装 player 字段的操作 - 更新相关代码以使用新的 ClientData 结构和方法
This commit is contained in:
@@ -1,15 +1,41 @@
|
||||
package entity
|
||||
|
||||
import "sync"
|
||||
|
||||
type ClientData struct {
|
||||
IsCrossDomain bool //是否跨域过
|
||||
Player *Player //客户实体
|
||||
isCrossDomain bool //是否跨域过
|
||||
player *Player //客户实体
|
||||
//UserID uint32
|
||||
m sync.Mutex
|
||||
}
|
||||
|
||||
func (cd *ClientData) SetPlayer(player *Player) {
|
||||
cd.m.Lock()
|
||||
defer cd.m.Unlock()
|
||||
cd.player = player
|
||||
}
|
||||
func (cd *ClientData) GetPlayer() *Player {
|
||||
cd.m.Lock()
|
||||
defer cd.m.Unlock()
|
||||
return cd.player
|
||||
}
|
||||
func (cd *ClientData) SetCrossDomain(isCrossDomain bool) {
|
||||
cd.m.Lock()
|
||||
defer cd.m.Unlock()
|
||||
cd.isCrossDomain = isCrossDomain
|
||||
}
|
||||
func (cd *ClientData) GetIsCrossDomain() bool {
|
||||
cd.m.Lock()
|
||||
defer cd.m.Unlock()
|
||||
return cd.isCrossDomain
|
||||
}
|
||||
|
||||
func NewClientData() *ClientData {
|
||||
cd := &ClientData{
|
||||
IsCrossDomain: false,
|
||||
Player: nil,
|
||||
cd := ClientData{
|
||||
isCrossDomain: false,
|
||||
player: nil,
|
||||
m: sync.Mutex{},
|
||||
}
|
||||
return cd
|
||||
return &cd
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package entity
|
||||
|
||||
import (
|
||||
"blazing/common/core"
|
||||
|
||||
"github.com/panjf2000/gnet/v2"
|
||||
)
|
||||
|
||||
@@ -43,3 +45,16 @@ func (p *Player) SendPack(b []byte) error {
|
||||
_, err := p.MainConn.Write(b)
|
||||
return err
|
||||
}
|
||||
|
||||
func ConutPlayer() int {
|
||||
|
||||
// v := reflect.ValueOf(&core.Mainplayer).Elem().FieldByName("m").Elem()
|
||||
// return int(v.FieldByName("count").Int())
|
||||
count := 0
|
||||
core.Mainplayer.Range(func(key, value interface{}) bool {
|
||||
count++
|
||||
return true // 继续遍历
|
||||
})
|
||||
return count
|
||||
//fmt.Println("元素数量:", count) // 输出: 3
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user