Skip to content

Commit 8b99099

Browse files
committed
add rollback session client events
1 parent 626d5ee commit 8b99099

4 files changed

Lines changed: 21 additions & 6 deletions

File tree

src/Backdash/Core/ThrowIf.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics;
12
using System.Globalization;
23
using System.Runtime.CompilerServices;
34

@@ -26,6 +27,9 @@ public static void InvalidEnum<T>(
2627
throw new ArgumentOutOfRangeException($"Invalid Enum of type {typeof(T).Name} for {argName}: {value}");
2728
}
2829

30+
[Conditional("DEBUG")]
31+
[Conditional("TRACE")]
32+
[Conditional("TOOLS")]
2933
public static void Assert(
3034
bool condition,
3135
string? info = null,

src/Backdash/Session/Backends/SyncTestSession.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ public void AdvanceFrame()
333333
synchronizer.LoadFrame(lastVerified);
334334

335335
inRollback = true;
336+
callbacks.BeginRollback(CurrentFrame);
336337
while (savedFrames.Count > 0)
337338
{
338339
callbacks.AdvanceFrame();
@@ -365,6 +366,7 @@ public void AdvanceFrame()
365366

366367
lastVerified = frame;
367368
inRollback = false;
369+
callbacks.EndRollback(CurrentFrame);
368370
}
369371

370372
void HandleDesync(Frame frame, SavedFrameBytes current, SavedState previous)

src/Backdash/Session/INetcodeSessionHandler.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ public interface INetcodeSessionHandler
6868
/// <seealso cref="IStateStringParser.GetStateString" />
6969
object? CreateState(Frame frame, ref readonly BinaryBufferReader reader) => null;
7070

71+
/// <summary>
72+
/// Notification that a rollback is started.
73+
/// </summary>
74+
void BeginRollback(Frame frame) { }
75+
76+
/// <summary>
77+
/// Notification that a rollback is ended.
78+
/// </summary>
79+
void EndRollback(Frame frame) { }
80+
7181
/// <summary>
7282
/// Called when a replay session run all inputs
7383
/// </summary>

src/Backdash/Synchronizing/Input/Synchronizer.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,23 @@ public Synchronizer(
4141
this.options = options;
4242
this.logger = logger;
4343
this.players = players;
44-
this.Store = stateStore;
4544
this.checksumProvider = checksumProvider;
4645
this.localConnections = localConnections;
4746
this.inputComparer = inputComparer ?? EqualityComparer<TInput>.Default;
4847
this.checksumStore = checksumStore;
49-
48+
Store = stateStore;
5049
inputQueues = new(2);
5150
NumberSerializer = options.GetEndiannessNumberStateSerializer();
5251
var saveBufferSize = options.TotalSavedFramesAllowed;
5352
stateStore.Initialize(saveBufferSize);
5453
}
5554

55+
float rollbackFrameCounter;
56+
5657
public bool InRollback { get; private set; }
5758
public IStateStore Store { get; }
5859
public EndiannessSerializer.INumberSerializer NumberSerializer { get; }
59-
60-
float rollbackFrameCounter;
61-
6260
public Frame CurrentFrame => currentFrame;
63-
6461
public Endianness SerializationEndianness => NumberSerializer.Endianness;
6562
public FrameSpan FramesBehind => new(currentFrame.Number - lastConfirmedFrame.Number);
6663
public FrameSpan RollbackFrames => new((int)Math.Round(rollbackFrameCounter));
@@ -187,6 +184,7 @@ public void AdjustSimulation(Frame seekTo)
187184
var rollbackCount = currentFrame.Number - seekTo.Number;
188185
logger.Write(LogLevel.Debug, $"Catching up. rolling back {rollbackCount} frames");
189186
InRollback = true;
187+
Callbacks.BeginRollback(currentFrame);
190188

191189
// Flush our input queue and load the last frame.
192190
LoadFrame(seekTo);
@@ -202,6 +200,7 @@ public void AdjustSimulation(Frame seekTo)
202200

203201
ThrowIf.Assert(currentFrame == localCurrentFrame);
204202
InRollback = false;
203+
Callbacks.EndRollback(currentFrame);
205204
}
206205

207206
public bool TryLoadFrame(Frame frame)

0 commit comments

Comments
 (0)