Skip to content

Commit c655aba

Browse files
mibac138notfood
andauthored
Integrate IsFragmented into PacketHandler (#532)
IsFragmented doesn't mean anything on its own, i.e. it's almost certainly a mistake to use it without an accompanying PacketHandler attribute. It makes more sense to just add it as a field to PacketHandler. Co-authored-by: Meru <notfood@users.noreply.github.com>
1 parent 5c17947 commit c655aba

File tree

6 files changed

+14
-28
lines changed

6 files changed

+14
-28
lines changed

Source/Client/Networking/State/ClientJoiningState.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ public void HandleUsernameOk(ByteReader data)
7777
connection.SendFragmented(Packets.Client_JoinData, writer.ToArray());
7878
}
7979

80-
[PacketHandler(Packets.Server_JoinData)]
81-
[IsFragmented]
80+
[PacketHandler(Packets.Server_JoinData, allowFragmented: true)]
8281
public void HandleJoinData(ByteReader data)
8382
{
8483
Multiplayer.session.gameName = data.ReadString();

Source/Client/Networking/State/ClientLoadingState.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ public void HandleWorldDataStart(ByteReader data)
2828
connection.Lenient = false; // Lenient is set while rejoining
2929
}
3030

31-
[PacketHandler(Packets.Server_WorldData)]
32-
[IsFragmented]
31+
[PacketHandler(Packets.Server_WorldData, allowFragmented: true)]
3332
public void HandleWorldData(ByteReader data)
3433
{
3534
Log.Message("Game data size: " + data.Length);

Source/Client/Networking/State/ClientPlayingState.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,7 @@ public void HandleNotification(ByteReader data)
208208
Messages.Message(key.Translate(Array.ConvertAll(args, s => (NamedArgument)s)), MessageTypeDefOf.SilentInput, false);
209209
}
210210

211-
[PacketHandler(Packets.Server_SyncInfo)]
212-
[IsFragmented]
211+
[PacketHandler(Packets.Server_SyncInfo, allowFragmented: true)]
213212
public void HandleDesyncCheck(ByteReader data)
214213
{
215214
Multiplayer.game?.sync.AddClientOpinionAndCheckDesync(ClientSyncOpinion.Deserialize(data));
@@ -225,8 +224,7 @@ public void HandleFreze(ByteReader data)
225224
TickPatch.frozenAt = frozenAt;
226225
}
227226

228-
[PacketHandler(Packets.Server_Traces)]
229-
[IsFragmented]
227+
[PacketHandler(Packets.Server_Traces, allowFragmented: true)]
230228
public void HandleTraces(ByteReader data)
231229
{
232230
var type = (TracesPacket)data.ReadInt32();

Source/Common/Networking/MpConnectionState.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@ public static void SetImplementation(ConnectionStateEnum state, Type type)
4040

4141
if (method.GetParameters().Length != 1 || method.GetParameters()[0].ParameterType != typeof(ByteReader))
4242
throw new Exception($"Bad packet handler signature for {method}");
43+
4344
if (packetHandlers[(int)state, (int)attr.packet] != null)
44-
throw new Exception($"Packet {state}:{attr.packet} already has a handler");
45-
bool fragment = method.GetAttribute<IsFragmentedAttribute>() != null;
45+
throw new Exception($"Packet {state}:{type} already has a handler");
46+
4647
packetHandlers[(int)state, (int)attr.packet] =
47-
new PacketHandlerInfo(MethodInvoker.GetHandler(method), fragment);
48+
new PacketHandlerInfo(MethodInvoker.GetHandler(method), attr.allowFragmented);
4849
}
4950
}
5051
}

Source/Common/Networking/PacketHandlerAttribute.cs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,10 @@
55
namespace Multiplayer.Common
66
{
77
[MeansImplicitUse]
8-
public class PacketHandlerAttribute : Attribute
9-
{
10-
public readonly Packets packet;
11-
12-
public PacketHandlerAttribute(Packets packet)
13-
{
14-
this.packet = packet;
15-
}
16-
}
17-
18-
public class IsFragmentedAttribute : Attribute
8+
public class PacketHandlerAttribute(Packets packet, bool allowFragmented = false) : Attribute
199
{
10+
public readonly Packets packet = packet;
11+
public readonly bool allowFragmented = allowFragmented;
2012
}
2113

2214
public record PacketHandlerInfo(FastInvokeHandler Method, bool Fragment);

Source/Common/Networking/State/ServerPlayingState.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ public void HandleDesynced(ByteReader data)
2828
Server.playerManager.OnDesync(Player, tick, diffAt);
2929
}
3030

31-
[PacketHandler(Packets.Client_Traces)]
32-
[IsFragmented]
31+
[PacketHandler(Packets.Client_Traces, allowFragmented: true)]
3332
public void HandleTraces(ByteReader data)
3433
{
3534
var type = (TracesPacket)data.ReadInt32();
@@ -77,8 +76,7 @@ public void HandleChat(ByteReader data)
7776
}
7877
}
7978

80-
[PacketHandler(Packets.Client_WorldDataUpload)]
81-
[IsFragmented]
79+
[PacketHandler(Packets.Client_WorldDataUpload, allowFragmented: true)]
8280
public void HandleWorldDataUpload(ByteReader data)
8381
{
8482
if (Server.ArbiterPlaying ? !Player.IsArbiter : !Player.IsHost) // policy
@@ -203,8 +201,7 @@ public void HandleClientKeepAlive(ByteReader data)
203201
}
204202
}
205203

206-
[PacketHandler(Packets.Client_SyncInfo)]
207-
[IsFragmented]
204+
[PacketHandler(Packets.Client_SyncInfo, allowFragmented: true)]
208205
public void HandleDesyncCheck(ByteReader data)
209206
{
210207
var arbiter = Server.ArbiterPlaying;

0 commit comments

Comments
 (0)