fix: lockstep.Lockstep 移除不必要的内容,修复 StartBroadcast 函数锁使用不正确的问题
This commit is contained in:
parent
18a0b06e0e
commit
61d41e51b5
|
@ -53,8 +53,6 @@ type Lockstep[ClientID comparable, Command any] struct {
|
||||||
currentCommands []Command // 当前帧指令
|
currentCommands []Command // 当前帧指令
|
||||||
currentFrameLock sync.RWMutex // 当前主要帧锁
|
currentFrameLock sync.RWMutex // 当前主要帧锁
|
||||||
|
|
||||||
//frames map[int64][]Command // 所有已经落帧完成的指令
|
|
||||||
//frameLock sync.RWMutex // 帧锁
|
|
||||||
frameCache map[int64][]byte // 帧序列化缓存
|
frameCache map[int64][]byte // 帧序列化缓存
|
||||||
frameCacheLock sync.RWMutex // 帧序列化缓存锁
|
frameCacheLock sync.RWMutex // 帧序列化缓存锁
|
||||||
ticker *timer.Ticker // 定时器
|
ticker *timer.Ticker // 定时器
|
||||||
|
@ -79,6 +77,9 @@ func (slf *Lockstep[ClientID, Command]) JoinClientWithFrame(client Client[Client
|
||||||
frameIndex = slf.currentFrame
|
frameIndex = slf.currentFrame
|
||||||
}
|
}
|
||||||
slf.currentFrameLock.RUnlock()
|
slf.currentFrameLock.RUnlock()
|
||||||
|
if frameIndex < slf.initFrame {
|
||||||
|
frameIndex = slf.initFrame
|
||||||
|
}
|
||||||
slf.clientLock.Lock()
|
slf.clientLock.Lock()
|
||||||
slf.clients[client.GetID()] = client
|
slf.clients[client.GetID()] = client
|
||||||
slf.clientFrame[client.GetID()] = frameIndex
|
slf.clientFrame[client.GetID()] = frameIndex
|
||||||
|
@ -109,13 +110,13 @@ func (slf *Lockstep[ClientID, Command]) LeaveClient(clientId ClientID) {
|
||||||
// - 在开始广播后将持续按照设定的帧率进行帧数推进,并在每一帧推进时向客户端进行同步,需提前将客户端加入广播队列 JoinClient
|
// - 在开始广播后将持续按照设定的帧率进行帧数推进,并在每一帧推进时向客户端进行同步,需提前将客户端加入广播队列 JoinClient
|
||||||
// - 广播过程中使用 AddCommand 将该帧数据追加到当前帧中
|
// - 广播过程中使用 AddCommand 将该帧数据追加到当前帧中
|
||||||
func (slf *Lockstep[ClientID, Command]) StartBroadcast() {
|
func (slf *Lockstep[ClientID, Command]) StartBroadcast() {
|
||||||
slf.runningLock.RLock()
|
slf.runningLock.Lock()
|
||||||
if slf.running {
|
if slf.running {
|
||||||
slf.runningLock.RUnlock()
|
slf.runningLock.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
slf.running = true
|
slf.running = true
|
||||||
slf.runningLock.RUnlock()
|
slf.runningLock.Unlock()
|
||||||
slf.currentFrame = slf.initFrame
|
slf.currentFrame = slf.initFrame
|
||||||
|
|
||||||
slf.ticker.Loop("lockstep", timer.Instantly, time.Second/time.Duration(slf.frameRate), timer.Forever, func() {
|
slf.ticker.Loop("lockstep", timer.Instantly, time.Second/time.Duration(slf.frameRate), timer.Forever, func() {
|
||||||
|
|
Loading…
Reference in New Issue