Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Source/Client/Networking/State/ClientJoiningState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ public void HandleUsernameOk(ByteReader data)
connection.SendFragmented(Packets.Client_JoinData, writer.ToArray());
}

[PacketHandler(Packets.Server_JoinData)]
[IsFragmented]
[PacketHandler(Packets.Server_JoinData, allowFragmented: true)]
public void HandleJoinData(ByteReader data)
{
Multiplayer.session.gameName = data.ReadString();
Expand Down
3 changes: 1 addition & 2 deletions Source/Client/Networking/State/ClientLoadingState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ public void HandleWorldDataStart(ByteReader data)
connection.Lenient = false; // Lenient is set while rejoining
}

[PacketHandler(Packets.Server_WorldData)]
[IsFragmented]
[PacketHandler(Packets.Server_WorldData, allowFragmented: true)]
public void HandleWorldData(ByteReader data)
{
Log.Message("Game data size: " + data.Length);
Expand Down
6 changes: 2 additions & 4 deletions Source/Client/Networking/State/ClientPlayingState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,7 @@ public void HandleNotification(ByteReader data)
Messages.Message(key.Translate(Array.ConvertAll(args, s => (NamedArgument)s)), MessageTypeDefOf.SilentInput, false);
}

[PacketHandler(Packets.Server_SyncInfo)]
[IsFragmented]
[PacketHandler(Packets.Server_SyncInfo, allowFragmented: true)]
public void HandleDesyncCheck(ByteReader data)
{
Multiplayer.game?.sync.AddClientOpinionAndCheckDesync(ClientSyncOpinion.Deserialize(data));
Expand All @@ -225,8 +224,7 @@ public void HandleFreze(ByteReader data)
TickPatch.frozenAt = frozenAt;
}

[PacketHandler(Packets.Server_Traces)]
[IsFragmented]
[PacketHandler(Packets.Server_Traces, allowFragmented: true)]
public void HandleTraces(ByteReader data)
{
var type = (TracesPacket)data.ReadInt32();
Expand Down
7 changes: 4 additions & 3 deletions Source/Common/Networking/MpConnectionState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,12 @@ public static void SetImplementation(ConnectionStateEnum state, Type type)

if (method.GetParameters().Length != 1 || method.GetParameters()[0].ParameterType != typeof(ByteReader))
throw new Exception($"Bad packet handler signature for {method}");

if (packetHandlers[(int)state, (int)attr.packet] != null)
throw new Exception($"Packet {state}:{attr.packet} already has a handler");
bool fragment = method.GetAttribute<IsFragmentedAttribute>() != null;
throw new Exception($"Packet {state}:{type} already has a handler");

packetHandlers[(int)state, (int)attr.packet] =
new PacketHandlerInfo(MethodInvoker.GetHandler(method), fragment);
new PacketHandlerInfo(MethodInvoker.GetHandler(method), attr.allowFragmented);
}
}
}
Expand Down
14 changes: 3 additions & 11 deletions Source/Common/Networking/PacketHandlerAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,10 @@
namespace Multiplayer.Common
{
[MeansImplicitUse]
public class PacketHandlerAttribute : Attribute
{
public readonly Packets packet;

public PacketHandlerAttribute(Packets packet)
{
this.packet = packet;
}
}

public class IsFragmentedAttribute : Attribute
public class PacketHandlerAttribute(Packets packet, bool allowFragmented = false) : Attribute
{
public readonly Packets packet = packet;
public readonly bool allowFragmented = allowFragmented;
}

public record PacketHandlerInfo(FastInvokeHandler Method, bool Fragment);
Expand Down
9 changes: 3 additions & 6 deletions Source/Common/Networking/State/ServerPlayingState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ public void HandleDesynced(ByteReader data)
Server.playerManager.OnDesync(Player, tick, diffAt);
}

[PacketHandler(Packets.Client_Traces)]
[IsFragmented]
[PacketHandler(Packets.Client_Traces, allowFragmented: true)]
public void HandleTraces(ByteReader data)
{
var type = (TracesPacket)data.ReadInt32();
Expand Down Expand Up @@ -77,8 +76,7 @@ public void HandleChat(ByteReader data)
}
}

[PacketHandler(Packets.Client_WorldDataUpload)]
[IsFragmented]
[PacketHandler(Packets.Client_WorldDataUpload, allowFragmented: true)]
public void HandleWorldDataUpload(ByteReader data)
{
if (Server.ArbiterPlaying ? !Player.IsArbiter : !Player.IsHost) // policy
Expand Down Expand Up @@ -203,8 +201,7 @@ public void HandleClientKeepAlive(ByteReader data)
}
}

[PacketHandler(Packets.Client_SyncInfo)]
[IsFragmented]
[PacketHandler(Packets.Client_SyncInfo, allowFragmented: true)]
public void HandleDesyncCheck(ByteReader data)
{
var arbiter = Server.ArbiterPlaying;
Expand Down
Loading