Skip to content

Commit 131ecea

Browse files
committed
add initial random seed configuration
1 parent dba0ebe commit 131ecea

File tree

18 files changed

+77
-44
lines changed

18 files changed

+77
-44
lines changed

.nuke/build.schema.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"GenerateBadges",
3737
"GenerateReport",
3838
"Lint",
39+
"PreCommit",
3940
"Report",
4041
"Restore",
4142
"Test",

_build/Build.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ IReadOnlyCollection<Output> BuildProj(AbsolutePath project, Configuration config
7979
.EnableNoRestore()
8080
.SetProject(Solution)));
8181

82+
Target PreCommit => _ => _
83+
.Description("Run Format and Tests")
84+
.DependsOn(Format)
85+
.Triggers(Test);
86+
8287
Target Test => _ => _
8388
.Description("Run tests with coverage")
8489
.DependsOn(Build)

samples/ConsoleGame/Game.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ public sealed class Game : INetcodeSessionHandler
1919
readonly View view;
2020

2121
// Actual game state
22-
GameState currentState = GameLogic.InitialState();
22+
GameState currentState;
2323

2424
public Game(INetcodeSession<GameInput> session, CancellationTokenSource cancellation)
2525
{
2626
view = new();
2727
this.session = session;
2828
this.cancellation = cancellation;
2929

30+
currentState = GameLogic.InitialState();
31+
3032
if (session.IsRemote())
3133
{
3234
if (!session.TryGetLocalPlayer(out var localPlayer))

samples/ConsoleGame/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ static INetcodeSession<GameInput> CreateNetcodeSession(Args args)
5050
.WithPlayerCount(args.PlayerCount)
5151
.WithPort(port)
5252
.WithInputDelayFrames(2)
53+
.WithInitialRandomSeed(42)
5354
.WithLogLevel(LogLevel.Information)
5455
.UsePlugin<PluginSample>()
5556
.WithPackageStats()

src/Backdash/Core/RandomNumberGenerator.cs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,14 @@ namespace Backdash.Core;
44

55
interface IRandomNumberGenerator
66
{
7-
uint SyncNumber();
8-
ushort MagicNumber();
7+
ushort SyncNumber();
98
int NextInt();
109
double NextGaussian();
1110
}
1211

1312
sealed class DefaultRandomNumberGenerator(Random random) : IRandomNumberGenerator
1413
{
15-
public uint SyncNumber()
16-
{
17-
using var gen = RandomNumberGenerator.Create();
18-
Span<byte> buff = stackalloc byte[sizeof(uint)];
19-
gen.GetBytes(buff);
20-
return BitConverter.ToUInt32(buff);
21-
}
22-
23-
public ushort MagicNumber()
14+
public ushort SyncNumber()
2415
{
2516
using var gen = RandomNumberGenerator.Create();
2617
Span<byte> buff = stackalloc byte[sizeof(ushort)];

src/Backdash/Network/Messages/Header.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ record struct Header(MessageType Type)
1010
public const int Size = 6;
1111

1212
public MessageType Type = Type;
13-
public ushort Magic = 0;
13+
public ushort SyncNumber = 0;
1414
public ushort SequenceNumber = 0;
1515

1616
public readonly void Serialize(in BinaryRawBufferWriter writer)
1717
{
1818
writer.Write((ushort)Type);
19-
writer.Write(in Magic);
19+
writer.Write(in SyncNumber);
2020
writer.Write(in SequenceNumber);
2121
}
2222

@@ -25,13 +25,13 @@ public void Deserialize(in BinaryBufferReader reader)
2525
try
2626
{
2727
Type = reader.ReadAsUInt16<MessageType>();
28-
Magic = reader.ReadUInt16();
28+
SyncNumber = reader.ReadUInt16();
2929
SequenceNumber = reader.ReadUInt16();
3030
}
3131
catch
3232
{
3333
Type = MessageType.Unknown;
34-
Magic = 0;
34+
SyncNumber = 0;
3535
SequenceNumber = 0;
3636
}
3737
}

src/Backdash/Network/Messages/SyncRequest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Backdash.Network.Messages;
77
[Serializable, StructLayout(LayoutKind.Sequential, Pack = 4)]
88
record struct SyncRequest : IUtf8SpanFormattable
99
{
10-
public uint RandomRequest; /* please reply with this random data */
10+
public ushort RandomRequest;
1111
public long Ping;
1212

1313
public readonly void Serialize(in BinaryRawBufferWriter writer)
@@ -18,7 +18,7 @@ public readonly void Serialize(in BinaryRawBufferWriter writer)
1818

1919
public void Deserialize(in BinaryBufferReader reader)
2020
{
21-
RandomRequest = reader.ReadUInt32();
21+
RandomRequest = reader.ReadUInt16();
2222
Ping = reader.ReadInt64();
2323
}
2424

src/Backdash/Network/Protocol/Comm/ProtocolInbox.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void OnPeerMessage(ref readonly ProtocolMessage message, in SocketAddress
5858
return;
5959
}
6060

61-
if (message.Header.Magic != state.RemoteMagicNumber)
61+
if (message.Header.SyncNumber != state.RemoteSyncNumber)
6262
{
6363
logger.Write(LogLevel.Debug, $"recv rejecting: {message} on {state.Player}");
6464
return;
@@ -228,7 +228,7 @@ bool OnSyncReply(ref readonly ProtocolMessage msg, ref ProtocolMessage replyMsg)
228228
if (state.CurrentStatus is not ProtocolStatus.Syncing)
229229
{
230230
logger.Write(LogLevel.Trace, "Ignoring SyncReply while not syncing");
231-
return msg.Header.Magic == state.RemoteMagicNumber;
231+
return msg.Header.SyncNumber == state.RemoteSyncNumber;
232232
}
233233

234234
if (msg.SyncReply.RandomReply != state.Sync.CurrentRandom)
@@ -257,7 +257,7 @@ bool OnSyncReply(ref readonly ProtocolMessage msg, ref ProtocolMessage replyMsg)
257257
state.CurrentStatus = ProtocolStatus.Running;
258258
state.Stats.RoundTripTime = ping;
259259
lastReceivedInput.ResetFrame();
260-
state.RemoteMagicNumber = msg.Header.Magic;
260+
state.RemoteSyncNumber = msg.Header.SyncNumber;
261261
networkEvents.OnNetworkEvent(new(ProtocolEvent.Synchronized, state.Player)
262262
{
263263
Synchronized = new(ping),
@@ -282,11 +282,11 @@ bool OnSyncReply(ref readonly ProtocolMessage msg, ref ProtocolMessage replyMsg)
282282

283283
public bool OnSyncRequest(ref readonly ProtocolMessage msg, ref ProtocolMessage replyMsg)
284284
{
285-
var remoteMagicNumber = state.RemoteMagicNumber;
286-
if (remoteMagicNumber is not 0 && msg.Header.Magic != remoteMagicNumber)
285+
var remoteMagicNumber = state.RemoteSyncNumber;
286+
if (remoteMagicNumber is not 0 && msg.Header.SyncNumber != remoteMagicNumber)
287287
{
288288
logger.Write(LogLevel.Warning,
289-
$"Ignoring sync request from unknown endpoint ({msg.Header.Magic} != {remoteMagicNumber})");
289+
$"Ignoring sync request from unknown endpoint ({msg.Header.SyncNumber} != {remoteMagicNumber})");
290290
return false;
291291
}
292292

src/Backdash/Network/Protocol/Comm/ProtocolOutbox.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Logger logger
1818

1919
public void BeforeSendMessage(ref ProtocolMessage message)
2020
{
21-
message.Header.Magic = state.SyncNumber;
21+
message.Header.SyncNumber = state.SyncNumber;
2222
message.Header.SequenceNumber = (ushort)nextSendSeq;
2323
nextSendSeq++;
2424

src/Backdash/Network/Protocol/ProtocolState.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ ushort syncNumber
2424
public readonly ConnectionsState LocalConnectStatuses = localConnectStatuses;
2525
public readonly ConnectionsState PeerConnectStatuses = new(Max.NumberOfPlayers, Frame.Null);
2626
public readonly ushort SyncNumber = syncNumber;
27-
public ushort RemoteMagicNumber;
27+
public ushort RemoteSyncNumber;
2828
public ProtocolStatus CurrentStatus;
2929

3030
public sealed class ConnectionState
@@ -91,10 +91,10 @@ public sealed class SyncState
9191
{
9292
public readonly object Locker = new();
9393
int remainingRoundTrips;
94-
uint currentRandom;
94+
ushort currentRandom;
9595
TimeSpan totalRoundTripsPing;
9696

97-
public uint CurrentRandom
97+
public ushort CurrentRandom
9898
{
9999
get
100100
{

0 commit comments

Comments
 (0)