From 61d41e51b5fe49a0ebc787666c1a5f010c573a53 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Fri, 27 Oct 2023 15:56:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20lockstep.Lockstep=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=E5=86=85=E5=AE=B9=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20StartBroadcast=20=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E9=94=81=E4=BD=BF=E7=94=A8=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/lockstep/lockstep.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/lockstep/lockstep.go b/server/lockstep/lockstep.go index efbd983..ca8e054 100644 --- a/server/lockstep/lockstep.go +++ b/server/lockstep/lockstep.go @@ -53,8 +53,6 @@ type Lockstep[ClientID comparable, Command any] struct { currentCommands []Command // 当前帧指令 currentFrameLock sync.RWMutex // 当前主要帧锁 - //frames map[int64][]Command // 所有已经落帧完成的指令 - //frameLock sync.RWMutex // 帧锁 frameCache map[int64][]byte // 帧序列化缓存 frameCacheLock sync.RWMutex // 帧序列化缓存锁 ticker *timer.Ticker // 定时器 @@ -79,6 +77,9 @@ func (slf *Lockstep[ClientID, Command]) JoinClientWithFrame(client Client[Client frameIndex = slf.currentFrame } slf.currentFrameLock.RUnlock() + if frameIndex < slf.initFrame { + frameIndex = slf.initFrame + } slf.clientLock.Lock() slf.clients[client.GetID()] = client slf.clientFrame[client.GetID()] = frameIndex @@ -109,13 +110,13 @@ func (slf *Lockstep[ClientID, Command]) LeaveClient(clientId ClientID) { // - 在开始广播后将持续按照设定的帧率进行帧数推进,并在每一帧推进时向客户端进行同步,需提前将客户端加入广播队列 JoinClient // - 广播过程中使用 AddCommand 将该帧数据追加到当前帧中 func (slf *Lockstep[ClientID, Command]) StartBroadcast() { - slf.runningLock.RLock() + slf.runningLock.Lock() if slf.running { - slf.runningLock.RUnlock() + slf.runningLock.Unlock() return } slf.running = true - slf.runningLock.RUnlock() + slf.runningLock.Unlock() slf.currentFrame = slf.initFrame slf.ticker.Loop("lockstep", timer.Instantly, time.Second/time.Duration(slf.frameRate), timer.Forever, func() {