Skip to content

Commit 6c2fa5a

Browse files
committed
add List<T> support for NetSerializer/PacketProcessor for custom types. Improved PacketProcessorExapmle
1 parent 87bc3c7 commit 6c2fa5a

File tree

4 files changed

+222
-32
lines changed

4 files changed

+222
-32
lines changed
Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,35 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Threading;
34
using LiteNetLib;
45
using LiteNetLib.Utils;
56

67
namespace LibSample
78
{
9+
struct CustomStruct : INetSerializable
10+
{
11+
public int X;
12+
public int Y;
13+
14+
public void Serialize(NetDataWriter writer)
15+
{
16+
writer.Put(X);
17+
writer.Put(Y);
18+
}
19+
20+
public void Deserialize(NetDataReader reader)
21+
{
22+
X = reader.GetInt();
23+
Y = reader.GetInt();
24+
}
25+
}
26+
827
class ArgumentsForLogin
928
{
1029
public string UserId { get; set; }
1130
public string Password { get; set; }
1231
public int SomeInt { get; set; }
32+
public List<CustomStruct> SomeList { get; set; }
1333
}
1434

1535
class PacketProcessorExample
@@ -21,31 +41,47 @@ class PacketProcessorExample
2141
public void Run()
2242
{
2343
//setup netpacketprocessor
44+
_netPacketProcessor.RegisterNestedType<CustomStruct>();
2445
_netPacketProcessor.SubscribeReusable<ArgumentsForLogin, NetPeer>(Method1);
2546

2647
//setup events
2748
EventBasedNetListener clientListener = new EventBasedNetListener();
2849
EventBasedNetListener serverListener = new EventBasedNetListener();
29-
serverListener.ConnectionRequestEvent += request => request.AcceptIfKey("key");
50+
serverListener.ConnectionRequestEvent += request =>
51+
{
52+
request.AcceptIfKey("key");
53+
};
3054
serverListener.NetworkReceiveEvent +=
31-
(peer, reader, method) => _netPacketProcessor.ReadAllPackets(reader, peer);
55+
(peer, reader, method) =>
56+
{
57+
_netPacketProcessor.ReadAllPackets(reader, peer);
58+
};
59+
clientListener.PeerConnectedEvent += peer =>
60+
{
61+
//send after connect
62+
var testList = new List<CustomStruct>
63+
{
64+
new CustomStruct {X = 1, Y = -1},
65+
new CustomStruct {X = 5, Y = -28},
66+
new CustomStruct {X = -114, Y = 65535}
67+
};
68+
_netPacketProcessor.Send(
69+
peer,
70+
new ArgumentsForLogin {Password = "pass", SomeInt = 5, UserId = "someUser", SomeList = testList},
71+
DeliveryMethod.ReliableOrdered);
72+
};
3273

3374
//start client/server
3475
_client = new NetManager(clientListener);
3576
_server = new NetManager(serverListener);
3677
_client.Start();
3778
_server.Start(9050);
38-
var clientPeer = _client.Connect("localhost", 9050, "key");
39-
40-
//send
41-
_netPacketProcessor.Send(
42-
clientPeer,
43-
new ArgumentsForLogin { Password = "pass", SomeInt = 5, UserId = "someUser"},
44-
DeliveryMethod.ReliableOrdered);
79+
_client.Connect("localhost", 9050, "key");
4580

4681
while (!Console.KeyAvailable)
4782
{
4883
_server.PollEvents();
84+
_client.PollEvents();
4985
Thread.Sleep(10);
5086
}
5187
_client.Stop();
@@ -55,6 +91,11 @@ public void Run()
5591
void Method1(ArgumentsForLogin args, NetPeer peer)
5692
{
5793
Console.WriteLine("Received: \n {0}\n {1}\n {2}", args.UserId, args.Password, args.SomeInt);
94+
Console.WriteLine("List count: " + args.SomeList.Count);
95+
for (int i = 0; i < args.SomeList.Count; i++)
96+
{
97+
Console.WriteLine($" X: {args.SomeList[i].X}, Y: {args.SomeList[i].Y}");
98+
}
5899
}
59100
}
60101
}

LiteNetLib.Tests/NetSerializerTest.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using LiteNetLib.Utils;
1+
using System.Collections.Generic;
2+
using LiteNetLib.Utils;
23

34
using NUnit.Framework;
45

@@ -22,7 +23,8 @@ public void Init()
2223
SomeByteArray = new byte[] { 255, 1, 0 },
2324
TestObj = new SampleNetSerializable {Value = 5},
2425
TestArray = new [] { new SampleNetSerializable { Value = 6 }, new SampleNetSerializable { Value = 15 } },
25-
SampleClassArray = new[] { new SampleClass { Value = 6 }, new SampleClass { Value = 15 } }
26+
SampleClassArray = new[] { new SampleClass { Value = 6 }, new SampleClass { Value = 15 } },
27+
SampleClassList = new List<SampleClass> { new SampleClass { Value = 1 }, new SampleClass { Value = 5 }}
2628
};
2729

2830
_packetProcessor = new NetPacketProcessor();
@@ -120,6 +122,7 @@ private class SamplePacket
120122
public SampleNetSerializable TestObj { get; set; }
121123
public SampleNetSerializable[] TestArray { get; set; }
122124
public SampleClass[] SampleClassArray { get; set; }
125+
public List<SampleClass> SampleClassList { get; set; }
123126
}
124127

125128
private static bool AreSame(string s1, string s2)
@@ -137,7 +140,7 @@ public void CustomPackageTest()
137140
var writer = new NetDataWriter();
138141
_packetProcessor.Write(writer, _samplePacket);
139142

140-
var reader = new NetDataReader(writer.CopyData());
143+
var reader = new NetDataReader(writer);
141144
SamplePacket readPackage = null;
142145

143146
_packetProcessor.SubscribeReusable<SamplePacket>(
@@ -160,6 +163,32 @@ public void CustomPackageTest()
160163
Assert.AreEqual(_samplePacket.TestArray, readPackage.TestArray);
161164
Assert.AreEqual(_samplePacket.SomeByteArray, readPackage.SomeByteArray);
162165
Assert.AreEqual(_samplePacket.SampleClassArray, readPackage.SampleClassArray);
166+
CollectionAssert.AreEqual(_samplePacket.SampleClassList, readPackage.SampleClassList);
167+
168+
//remove test
169+
_samplePacket.SampleClassList.RemoveAt(0);
170+
_samplePacket.SampleClassArray = new []{new SampleClass {Value = 1}};
171+
172+
writer.Reset();
173+
_packetProcessor.Write(writer, _samplePacket);
174+
reader.SetSource(writer);
175+
_packetProcessor.ReadAllPackets(reader);
176+
177+
Assert.AreEqual(_samplePacket.SampleClassArray, readPackage.SampleClassArray);
178+
CollectionAssert.AreEqual(_samplePacket.SampleClassList, readPackage.SampleClassList);
179+
180+
//add test
181+
_samplePacket.SampleClassList.Add(new SampleClass { Value = 152 });
182+
_samplePacket.SampleClassList.Add(new SampleClass { Value = 154 });
183+
_samplePacket.SampleClassArray = new[] { new SampleClass { Value = 1 }, new SampleClass { Value = 2 }, new SampleClass { Value = 3 } };
184+
185+
writer.Reset();
186+
_packetProcessor.Write(writer, _samplePacket);
187+
reader.SetSource(writer);
188+
_packetProcessor.ReadAllPackets(reader);
189+
190+
Assert.AreEqual(_samplePacket.SampleClassArray, readPackage.SampleClassArray);
191+
CollectionAssert.AreEqual(_samplePacket.SampleClassList, readPackage.SampleClassList);
163192
}
164193
}
165194
}

LiteNetLib/Utils/NetDataReader.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ public NetDataReader()
9393

9494
}
9595

96+
public NetDataReader(NetDataWriter writer)
97+
{
98+
SetSource(writer);
99+
}
100+
96101
public NetDataReader(byte[] source)
97102
{
98103
SetSource(source);

0 commit comments

Comments
 (0)