Skip to content

Commit 8019494

Browse files
committed
fix load null frame for reset local session
1 parent 9482c3f commit 8019494

4 files changed

Lines changed: 27 additions & 2 deletions

File tree

src/Backdash/Session/Backends/LocalSession.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ void DiscardInputsAfter(Frame frame)
310310
void ResetInputQueues()
311311
{
312312
CurrentFrame = Frame.Zero;
313+
stateStore.Clear();
313314
ref var current = ref MemoryMarshal.GetReference(inputQueues.AsSpan());
314315
ref var limit = ref Unsafe.Add(ref current, inputQueues.Length);
315316
while (Unsafe.IsAddressLessThan(ref current, ref limit))

src/Backdash/Synchronizing/State/DefaultStateStore.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,21 @@ public sealed class DefaultStateStore(int hintSize) : IStateStore
1818
public void Initialize(int saveCount)
1919
{
2020
savedStates = new SavedState[saveCount];
21-
for (var i = 0; i < saveCount; i++)
22-
savedStates[i] = new(Frame.Null, new(hintSize), Checksum.Empty);
21+
for (var i = 0; i < savedStates.Length; i++)
22+
savedStates[i] = new(hintSize);
2323
}
2424

2525
/// <inheritdoc />
2626
public void Advance() => head = (head + 1) % savedStates.Length;
2727

28+
/// <inheritdoc />
29+
public void Clear()
30+
{
31+
head = 0;
32+
foreach (var state in savedStates)
33+
state.Clear();
34+
}
35+
2836
/// <inheritdoc />
2937
public ref SavedState Next()
3038
{

src/Backdash/Synchronizing/State/IStateStore.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public interface IStateStore
4545
/// </summary>
4646
void Advance();
4747

48+
/// <summary>
49+
/// Clear all saved states
50+
/// </summary>
51+
void Clear();
52+
4853
/// <summary>
4954
/// Return a <see cref="SavedState" /> for <paramref name="frame" /> if exists, <see langword="null" /> otherwise.
5055
/// </summary>

src/Backdash/Synchronizing/State/SavedState.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ namespace Backdash.Synchronizing.State;
1111
/// <param name="Checksum">Checksum of state</param>
1212
public sealed record SavedState(Frame Frame, ArrayBufferWriter<byte> GameState, Checksum Checksum)
1313
{
14+
/// <inheritdoc />
15+
public SavedState(int hintSize) : this(Frame.Null, new(hintSize), Checksum.Empty) { }
16+
1417
/// <summary>Saved frame number</summary>
1518
public Frame Frame = Frame;
1619

@@ -25,4 +28,12 @@ public sealed record SavedState(Frame Frame, ArrayBufferWriter<byte> GameState,
2528

2629
/// <summary>Returns a snapshot of the current saved state</summary>
2730
public StateSnapshot ToSnapshot() => new(Frame, Checksum, GameState.WrittenSpan.ToArray());
31+
32+
/// <summary>Clear current saved state</summary>
33+
public void Clear()
34+
{
35+
Frame = Frame.Null;
36+
Checksum = Checksum.Empty;
37+
GameState.Clear();
38+
}
2839
}

0 commit comments

Comments
 (0)