Skip to content

Commit f416aa8

Browse files
committed
library tunes for BlockField (2)
1 parent 5c343b1 commit f416aa8

9 files changed

Lines changed: 107 additions & 52 deletions

File tree

LibSample/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ static void Main(string[] args)
7171
server.UnconnectedMessagesEnabled = true;
7272
server.Start(9050);
7373
server.Stop();
74-
server.Start(9050);
74+
//server.Start(9050);
7575

7676
NetClient client = new NetClient();
7777
client.UnconnectedMessagesEnabled = true;
@@ -101,7 +101,7 @@ static void Main(string[] args)
101101
Thread.Sleep(10);
102102
}
103103

104-
server.Stop();
104+
//server.Stop();
105105
client.Stop();
106106
}
107107
}

LiteNetLib/LiteNetLib.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
<OutputType>Library</OutputType>
88
<RootNamespace>LiteNetLib</RootNamespace>
99
<AssemblyName>LiteNetLib</AssemblyName>
10-
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
10+
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
11+
<TargetFrameworkProfile />
1112
</PropertyGroup>
1213
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
1314
<DebugSymbols>true</DebugSymbols>

LiteNetLib/NatPunchModule.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ internal void ProcessMessage(NetEndPoint senderEndPoint, PacketProperty property
8585
NetUtils.DebugWrite(ConsoleColor.Green, "NAT punch received from {0} we're client, so we've succeeded - additional info: {1}", senderEndPoint, additionalInfo);
8686

8787
//Release punch success to client; enabling him to Connect() to msg.Sender if token is ok
88-
_netBase.EnqueueEvent(senderEndPoint, null, NetEventType.NatIntroductionSuccess);
88+
var netEvent = _netBase.CreateEvent(NetEventType.NatIntroductionSuccess);
89+
netEvent.RemoteEndPoint = senderEndPoint;
90+
_netBase.EnqueueEvent(netEvent);
8991

9092
//send a return punch just for good measure
9193
dw.Put((byte)0);

LiteNetLib/NetBase.cs

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -179,22 +179,7 @@ public NetEndPoint LocalEndPoint
179179
get { return _localEndPoint; }
180180
}
181181

182-
internal void EnqueueEvent(NetEndPoint remoteEndPoint, byte[] data, NetEventType type)
183-
{
184-
EnqueueEvent(null, remoteEndPoint, data, type);
185-
}
186-
187-
internal void EnqueueEvent(NetPeer peer, byte[] data, NetEventType type)
188-
{
189-
EnqueueEvent(peer, peer.EndPoint, data, type);
190-
}
191-
192-
internal void EnqueueEvent(NetEventType type)
193-
{
194-
EnqueueEvent(null, null, null, type);
195-
}
196-
197-
internal void EnqueueEvent(NetPeer peer, NetEndPoint remoteEndPoint, byte[] data, NetEventType type)
182+
internal NetEvent CreateEvent(NetEventType type)
198183
{
199184
NetEvent evt;
200185
if (_netEventsPool.Count > 0)
@@ -209,12 +194,12 @@ internal void EnqueueEvent(NetPeer peer, NetEndPoint remoteEndPoint, byte[] data
209194
evt = new NetEvent();
210195
evt.DataReader = new NetDataReader();
211196
}
212-
if (data != null)
213-
evt.DataReader.SetSource(data);
214-
215-
evt.Peer = peer;
216197
evt.Type = type;
217-
evt.RemoteEndPoint = remoteEndPoint;
198+
return evt;
199+
}
200+
201+
internal void EnqueueEvent(NetEvent evt)
202+
{
218203
lock (_netEventsQueue)
219204
{
220205
_netEventsQueue.Enqueue(evt);
@@ -227,6 +212,8 @@ public void Recycle(NetEvent netEvent)
227212
{
228213
netEvent.DataReader.Clear();
229214
netEvent.Peer = null;
215+
netEvent.AdditionalInfo = string.Empty;
216+
netEvent.RemoteEndPoint = null;
230217
_netEventsPool.Push(netEvent);
231218
}
232219
}
@@ -293,7 +280,7 @@ private void ReceiveLogic()
293280
if (errorCode != 10054)
294281
{
295282
NetUtils.DebugWrite(ConsoleColor.Red, "(NB)Socket error!");
296-
ProcessError();
283+
ProcessError("Receive socket error: " + errorCode);
297284
Stop();
298285
return;
299286
}
@@ -314,7 +301,12 @@ private void DataReceived(byte[] reusableBuffer, int count, NetEndPoint remoteEn
314301
{
315302
case PacketProperty.UnconnectedMessage:
316303
if (UnconnectedMessagesEnabled)
317-
EnqueueEvent(remoteEndPoint, NetPacket.GetUnconnectedData(reusableBuffer, count), NetEventType.ReceiveUnconnected);
304+
{
305+
var netEvent = CreateEvent(NetEventType.ReceiveUnconnected);
306+
netEvent.RemoteEndPoint = remoteEndPoint;
307+
netEvent.DataReader.SetSource(NetPacket.GetUnconnectedData(reusableBuffer, count));
308+
EnqueueEvent(netEvent);
309+
}
318310
return;
319311
case PacketProperty.NatIntroduction:
320312
case PacketProperty.NatIntroductionRequest:
@@ -328,12 +320,12 @@ private void DataReceived(byte[] reusableBuffer, int count, NetEndPoint remoteEn
328320
ReceiveFromSocket(reusableBuffer, count, remoteEndPoint);
329321
}
330322

331-
protected abstract void ProcessError();
323+
protected abstract void ProcessError(string errorMessage);
332324

333325
protected abstract void ReceiveFromSocket(byte[] reusableBuffer, int count, NetEndPoint remoteEndPoint);
334326
protected abstract void PostProcessEvent(int deltaTime);
335327

336328
internal abstract void ReceiveFromPeer(NetPacket packet, NetEndPoint endPoint);
337-
internal abstract void ProcessSendError(NetEndPoint endPoint);
329+
internal abstract void ProcessSendError(NetEndPoint endPoint, string errorMessage);
338330
}
339331
}

LiteNetLib/NetClient.cs

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public long DisconnectTimeout
2020
set { _timeout = value; }
2121
}
2222

23+
public int Ping
24+
{
25+
get { return _peer == null ? 0 : _peer.Ping; }
26+
}
27+
2328
public long Id
2429
{
2530
get { return _id; }
@@ -80,9 +85,11 @@ public override void Stop()
8085
base.Stop();
8186
}
8287

83-
protected override void ProcessError()
88+
protected override void ProcessError(string errorMessage)
8489
{
85-
EnqueueEvent(NetEventType.Error);
90+
var netEvent = CreateEvent(NetEventType.Disconnect);
91+
netEvent.AdditionalInfo = errorMessage;
92+
EnqueueEvent(netEvent);
8693
if (_peer != null)
8794
{
8895
CloseConnection(true);
@@ -125,7 +132,9 @@ protected override void PostProcessEvent(int deltaTime)
125132
_connectAttempts++;
126133
if (_connectAttempts > _maxConnectAttempts)
127134
{
128-
EnqueueEvent(NetEventType.Disconnect);
135+
var netEvent = CreateEvent(NetEventType.Disconnect);
136+
netEvent.AdditionalInfo = "connection timeout";
137+
EnqueueEvent(netEvent);
129138
Stop();
130139
return;
131140
}
@@ -140,20 +149,28 @@ protected override void PostProcessEvent(int deltaTime)
140149
if (_peer.TimeSinceLastPacket > _timeout)
141150
{
142151
Stop();
143-
EnqueueEvent(NetEventType.Disconnect);
152+
var netEvent = CreateEvent(NetEventType.Disconnect);
153+
netEvent.AdditionalInfo = "Timeout";
154+
EnqueueEvent(netEvent);
144155
}
145156
}
146157

147158
internal override void ReceiveFromPeer(NetPacket packet, NetEndPoint remoteEndPoint)
148159
{
149160
NetUtils.DebugWrite(ConsoleColor.Cyan, "[NC] Received message");
150-
EnqueueEvent(_peer, packet.GetPacketData(), NetEventType.Receive);
161+
var netEvent = CreateEvent(NetEventType.Receive);
162+
netEvent.DataReader.SetSource(packet.GetPacketData());
163+
netEvent.Peer = _peer;
164+
netEvent.RemoteEndPoint = remoteEndPoint;
165+
EnqueueEvent(netEvent);
151166
}
152167

153-
internal override void ProcessSendError(NetEndPoint remoteEndPoint)
168+
internal override void ProcessSendError(NetEndPoint remoteEndPoint, string errorMessage)
154169
{
155170
Stop();
156-
EnqueueEvent(NetEventType.Error);
171+
var netEvent = CreateEvent(NetEventType.Error);
172+
netEvent.AdditionalInfo = errorMessage;
173+
EnqueueEvent(netEvent);
157174
}
158175

159176
protected override void ReceiveFromSocket(byte[] reusableBuffer, int count, NetEndPoint remoteEndPoint)
@@ -182,7 +199,9 @@ protected override void ReceiveFromSocket(byte[] reusableBuffer, int count, NetE
182199
{
183200
NetUtils.DebugWrite(ConsoleColor.Cyan, "[NC] Received disconnection");
184201
CloseConnection(true);
185-
EnqueueEvent(NetEventType.Disconnect);
202+
var disconnectEvent = CreateEvent(NetEventType.Disconnect);
203+
disconnectEvent.AdditionalInfo = "Received disconnection from server";
204+
EnqueueEvent(disconnectEvent);
186205
return;
187206
}
188207

@@ -191,7 +210,10 @@ protected override void ReceiveFromSocket(byte[] reusableBuffer, int count, NetE
191210
NetUtils.DebugWrite(ConsoleColor.Cyan, "[NC] Received connection accept");
192211
_waitForConnect = false;
193212
_connected = true;
194-
EnqueueEvent(_peer, null, NetEventType.Connect);
213+
var connectEvent = CreateEvent(NetEventType.Connect);
214+
connectEvent.Peer = _peer;
215+
connectEvent.RemoteEndPoint = _peer.EndPoint;
216+
EnqueueEvent(connectEvent);
195217
return;
196218
}
197219

LiteNetLib/NetEvent.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public sealed class NetEvent
1717
{
1818
public NetPeer Peer { get; internal set; }
1919
public NetDataReader DataReader { get; internal set; }
20+
public byte[] Data { get { return DataReader.Data; } }
2021
public NetEventType Type { get; internal set; }
2122
public NetEndPoint RemoteEndPoint { get; internal set; }
23+
public string AdditionalInfo { get; internal set; }
2224
}
2325
}

LiteNetLib/NetPeer.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ internal void AddIncomingPacket(NetPacket packet)
263263
//Process incoming packet
264264
internal void ProcessPacket(NetPacket packet)
265265
{
266-
_lastPacketStopwatch.Restart();
266+
_lastPacketStopwatch.Reset();
267+
_lastPacketStopwatch.Start();
267268

268269
DebugWrite("[RR]PacketProperty: {0}", packet.Property);
269270
switch (packet.Property)
@@ -332,11 +333,12 @@ internal void ProcessPacket(NetPacket packet)
332333

333334
internal bool SendRawData(byte[] data)
334335
{
335-
if (_socket.SendTo(data, _remoteEndPoint) == -1)
336+
int errorCode = 0;
337+
if (_socket.SendTo(data, _remoteEndPoint, ref errorCode) == -1)
336338
{
337339
lock (_peerListener)
338340
{
339-
_peerListener.ProcessSendError(_remoteEndPoint);
341+
_peerListener.ProcessSendError(_remoteEndPoint, errorCode.ToString());
340342
}
341343
return false;
342344
}
@@ -398,7 +400,8 @@ internal void Update(int deltaTime)
398400
CreateAndSend(PacketProperty.Ping, _pingSequence);
399401

400402
//reset timer
401-
_pingStopwatch.Restart();
403+
_pingStopwatch.Reset();
404+
_pingStopwatch.Start();
402405
}
403406

404407
//reset rtt

LiteNetLib/NetServer.cs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ public override void Stop()
7373
base.Stop();
7474
}
7575

76-
protected override void ProcessError()
76+
protected override void ProcessError(string errorMessage)
7777
{
7878
_peers.Clear();
79-
EnqueueEvent(NetEventType.Error);
79+
var netEvent = CreateEvent(NetEventType.Error);
80+
netEvent.AdditionalInfo = errorMessage;
81+
EnqueueEvent(netEvent);
8082
}
8183

8284
protected override void PostProcessEvent(int deltaTime)
@@ -88,7 +90,11 @@ protected override void PostProcessEvent(int deltaTime)
8890
{
8991
if (netPeer.TimeSinceLastPacket > _timeout)
9092
{
91-
EnqueueEvent(netPeer, null, NetEventType.Disconnect);
93+
var netEvent = CreateEvent(NetEventType.Disconnect);
94+
netEvent.Peer = netPeer;
95+
netEvent.RemoteEndPoint = netPeer.EndPoint;
96+
netEvent.AdditionalInfo = "Timeout";
97+
EnqueueEvent(netEvent);
9298
RemovePeer(netPeer);
9399
}
94100
else
@@ -108,16 +114,24 @@ internal override void ReceiveFromPeer(NetPacket packet, NetEndPoint remoteEndPo
108114
NetPeer fromPeer;
109115
if (_peers.TryGetValue(remoteEndPoint, out fromPeer))
110116
{
111-
EnqueueEvent(fromPeer, packet.GetPacketData(), NetEventType.Receive);
117+
var netEvent = CreateEvent(NetEventType.Receive);
118+
netEvent.Peer = fromPeer;
119+
netEvent.RemoteEndPoint = fromPeer.EndPoint;
120+
netEvent.DataReader.SetSource(packet.GetPacketData());
121+
EnqueueEvent(netEvent);
112122
}
113123
}
114124

115-
internal override void ProcessSendError(NetEndPoint remoteEndPoint)
125+
internal override void ProcessSendError(NetEndPoint remoteEndPoint, string errorMessage)
116126
{
117127
NetPeer fromPeer;
118128
if (_peers.TryGetValue(remoteEndPoint, out fromPeer))
119129
{
120-
EnqueueEvent(fromPeer, null, NetEventType.Disconnect);
130+
var netEvent = CreateEvent(NetEventType.Disconnect);
131+
netEvent.Peer = fromPeer;
132+
netEvent.RemoteEndPoint = fromPeer.EndPoint;
133+
netEvent.AdditionalInfo = "Peer send error: " + errorMessage;
134+
EnqueueEvent(netEvent);
121135
RemovePeer(fromPeer);
122136
}
123137
}
@@ -143,7 +157,11 @@ protected override void ReceiveFromSocket(byte[] reusableBuffer, int count, NetE
143157
if (packet.Property == PacketProperty.Disconnect)
144158
{
145159
RemovePeer(netPeer);
146-
EnqueueEvent(netPeer, null, NetEventType.Disconnect);
160+
var netEvent = CreateEvent(NetEventType.Disconnect);
161+
netEvent.Peer = netPeer;
162+
netEvent.RemoteEndPoint = netPeer.EndPoint;
163+
netEvent.AdditionalInfo = "successfuly disconnected";
164+
EnqueueEvent(netEvent);
147165
}
148166
else
149167
{
@@ -174,7 +192,10 @@ protected override void ReceiveFromSocket(byte[] reusableBuffer, int count, NetE
174192
_peers.Add(peerEndPoint, netPeer);
175193
}
176194

177-
EnqueueEvent(netPeer, null, NetEventType.Connect);
195+
var netEvent = CreateEvent(NetEventType.Connect);
196+
netEvent.Peer = netPeer;
197+
netEvent.RemoteEndPoint = netPeer.EndPoint;
198+
EnqueueEvent(netEvent);
178199
}
179200
}
180201

LiteNetLib/NetSocket.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,26 @@ public bool Bind(NetEndPoint ep)
3737
}
3838

3939
public int SendTo(byte[] data, NetEndPoint remoteEndPoint)
40+
{
41+
int unusedErrorCode = 0;
42+
return SendTo(data, remoteEndPoint, ref unusedErrorCode);
43+
}
44+
45+
public int SendTo(byte[] data, NetEndPoint remoteEndPoint, ref int errorCode)
4046
{
4147
try
4248
{
4349
int result = _udpSocket.SendTo(data, remoteEndPoint.EndPoint);
44-
NetUtils.DebugWrite(ConsoleColor.Blue, "[S]Send packet to {0}, result: {1}", remoteEndPoint.EndPoint, result);
50+
NetUtils.DebugWrite(ConsoleColor.Blue, "[S]Send packet to {0}, result: {1}", remoteEndPoint.EndPoint,
51+
result);
4552
return result;
4653
}
54+
catch (SocketException ex)
55+
{
56+
NetUtils.DebugWrite(ConsoleColor.Blue, "[S]" + ex);
57+
errorCode = ex.ErrorCode;
58+
return -1;
59+
}
4760
catch (Exception ex)
4861
{
4962
NetUtils.DebugWrite(ConsoleColor.Blue, "[S]" + ex);
@@ -99,7 +112,6 @@ public int ReceiveFrom(ref byte[] data, ref NetEndPoint remoteEndPoint, ref int
99112
public void Close()
100113
{
101114
_udpSocket.Close();
102-
_udpSocket.Dispose();
103115
_udpSocket = null;
104116
}
105117
}

0 commit comments

Comments
 (0)