forked from RevenantX/LiteNetLib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPacketProcessorExample.cs
More file actions
101 lines (91 loc) · 3.19 KB
/
PacketProcessorExample.cs
File metadata and controls
101 lines (91 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Threading;
using LiteNetLib;
using LiteNetLib.Utils;
namespace LibSample
{
struct CustomStruct : INetSerializable
{
public int X;
public int Y;
public void Serialize(NetDataWriter writer)
{
writer.Put(X);
writer.Put(Y);
}
public void Deserialize(NetDataReader reader)
{
X = reader.GetInt();
Y = reader.GetInt();
}
}
class ArgumentsForLogin
{
public string UserId { get; set; }
public string Password { get; set; }
public int SomeInt { get; set; }
public List<CustomStruct> SomeList { get; set; }
}
class PacketProcessorExample : IExample
{
private readonly NetPacketProcessor _netPacketProcessor = new NetPacketProcessor();
private NetManager _client;
private NetManager _server;
public void Run()
{
//setup netpacketprocessor
_netPacketProcessor.RegisterNestedType<CustomStruct>();
_netPacketProcessor.SubscribeReusable<ArgumentsForLogin, NetPeer>(Method1);
//setup events
EventBasedNetListener clientListener = new EventBasedNetListener();
EventBasedNetListener serverListener = new EventBasedNetListener();
serverListener.ConnectionRequestEvent += request =>
{
request.AcceptIfKey("key");
};
serverListener.NetworkReceiveEvent +=
(peer, reader, method) =>
{
_netPacketProcessor.ReadAllPackets(reader, peer);
};
clientListener.PeerConnectedEvent += peer =>
{
//send after connect
var testList = new List<CustomStruct>
{
new CustomStruct {X = 1, Y = -1},
new CustomStruct {X = 5, Y = -28},
new CustomStruct {X = -114, Y = 65535}
};
_netPacketProcessor.Send(
peer,
new ArgumentsForLogin {Password = "pass", SomeInt = 5, UserId = "someUser", SomeList = testList},
DeliveryMethod.ReliableOrdered);
};
//start client/server
_client = new NetManager(clientListener);
_server = new NetManager(serverListener);
_client.Start();
_server.Start(9050);
_client.Connect("localhost", 9050, "key");
while (!Console.KeyAvailable)
{
_server.PollEvents();
_client.PollEvents();
Thread.Sleep(10);
}
_client.Stop();
_server.Stop();
}
void Method1(ArgumentsForLogin args, NetPeer peer)
{
Console.WriteLine("Received: \n {0}\n {1}\n {2}", args.UserId, args.Password, args.SomeInt);
Console.WriteLine("List count: " + args.SomeList.Count);
for (int i = 0; i < args.SomeList.Count; i++)
{
Console.WriteLine($" X: {args.SomeList[i].X}, Y: {args.SomeList[i].Y}");
}
}
}
}