Skip to content

Commit a55597e

Browse files
authored
Packet serialization optimization (#31)
1 parent 5e78ef6 commit a55597e

38 files changed

+166
-52
lines changed

src/MineCase.Protocol/MineCase.Protocol.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netstandard1.4</TargetFramework>
4+
<TargetFramework>netstandard1.5</TargetFramework>
55
<RootNamespace>MineCase</RootNamespace>
66
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
77
<CodeAnalysisRuleSet>../../build/Analyzers.ruleset</CodeAnalysisRuleSet>
@@ -10,6 +10,7 @@
1010
<ItemGroup>
1111
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
1212
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.3.0" />
13+
<PackageReference Include="Microsoft.Orleans.Core" Version="2.0.0-preview2-20170724" />
1314
<PackageReference Include="StyleCop.Analyzers" Version="1.1.0-beta004" PrivateAssets="All" />
1415
</ItemGroup>
1516

src/MineCase.Protocol/Protocol/Handshaking/Handshake.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Handshaking
89
{
10+
[Immutable]
911
[Packet(0x00)]
1012
public sealed class Handshake
1113
{

src/MineCase.Protocol/Protocol/Login/LoginStart.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Login
89
{
10+
[Immutable]
911
[Packet(0x00)]
1012
public sealed class LoginStart
1113
{
@@ -21,6 +23,7 @@ public static LoginStart Deserialize(BinaryReader br)
2123
}
2224
}
2325

26+
[Immutable]
2427
[Packet(0x00)]
2528
public sealed class LoginDisconnect : ISerializablePacket
2629
{
@@ -41,6 +44,7 @@ public void Serialize(BinaryWriter bw)
4144
}
4245
}
4346

47+
[Immutable]
4448
[Packet(0x02)]
4549
public sealed class LoginSuccess : ISerializablePacket
4650
{

src/MineCase.Protocol/Protocol/Packet.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
using System.Text;
55
using System.Threading.Tasks;
66
using MineCase.Serialization;
7+
using Orleans.Concurrency;
78

89
namespace MineCase.Protocol
910
{
10-
public struct UncompressedPacket
11+
[Immutable]
12+
public class UncompressedPacket
1113
{
1214
[SerializeAs(DataType.VarInt)]
1315
public uint Length;
@@ -34,7 +36,7 @@ public async Task SerializeAsync(Stream stream)
3436

3537
public static async Task<UncompressedPacket> DeserializeAsync(Stream stream)
3638
{
37-
var packet = default(UncompressedPacket);
39+
var packet = new UncompressedPacket();
3840
int packetIdLen;
3941
using (var br = new BinaryReader(stream, Encoding.UTF8, true))
4042
{
@@ -48,7 +50,8 @@ public static async Task<UncompressedPacket> DeserializeAsync(Stream stream)
4850
}
4951
}
5052

51-
public struct CompressedPacket
53+
[Immutable]
54+
public class CompressedPacket
5255
{
5356
[SerializeAs(DataType.VarInt)]
5457
public uint PacketLength;
@@ -75,7 +78,7 @@ public async Task SerializeAsync(Stream stream)
7578

7679
public static async Task<CompressedPacket> DeserializeAsync(Stream stream)
7780
{
78-
var packet = default(CompressedPacket);
81+
var packet = new CompressedPacket();
7982
int dataLengthLen;
8083
using (var br = new BinaryReader(stream, Encoding.UTF8, true))
8184
{

src/MineCase.Protocol/Protocol/Play/ChatMessage.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
using System.Text;
55
using MineCase.Formats;
66
using MineCase.Serialization;
7+
using Orleans.Concurrency;
78

89
namespace MineCase.Protocol.Play
910
{
11+
[Immutable]
1012
[Packet(0x03)]
1113
public sealed class ServerboundChatMessage
1214
{
@@ -23,6 +25,7 @@ public static ServerboundChatMessage Deserialize(BinaryReader br)
2325
}
2426

2527
// TODO
28+
[Immutable]
2629
[Packet(0x0F)]
2730
public sealed class ClientboundChatMessage : ISerializablePacket
2831
{

src/MineCase.Protocol/Protocol/Play/ChunkData.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Play
89
{
10+
[Immutable]
911
[Packet(0x20)]
1012
public sealed class ChunkData : ISerializablePacket
1113
{
@@ -59,6 +61,7 @@ public void Serialize(BinaryWriter bw)
5961
}
6062
}
6163

64+
[Immutable]
6265
public sealed class ChunkSection : ISerializablePacket
6366
{
6467
[SerializeAs(DataType.Byte)]

src/MineCase.Protocol/Protocol/Play/ClientSettings.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Play
89
{
10+
[Immutable]
911
[Packet(0x05)]
1012
public sealed class ClientSettings
1113
{

src/MineCase.Protocol/Protocol/Play/ConfirmTransaction.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Play
89
{
10+
[Immutable]
911
[Packet(0x06)]
1012
public sealed class ServerboundConfirmTransaction
1113
{

src/MineCase.Protocol/Protocol/Play/HeldItemChange.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Play
89
{
10+
[Immutable]
911
[Packet(0x1A)]
1012
public sealed class ServerboundHeldItemChange
1113
{

src/MineCase.Protocol/Protocol/Play/JoinGame.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using System.Text;
55
using MineCase.Serialization;
6+
using Orleans.Concurrency;
67

78
namespace MineCase.Protocol.Play
89
{
10+
[Immutable]
911
[Packet(0x23)]
1012
public class JoinGame : ISerializablePacket
1113
{

0 commit comments

Comments
 (0)