Skip to content

Commit b1e5484

Browse files
committed
Added settings to LiteNetLibTransportProvider. In addition, made general improvements and fixed a bug when sending user data with a byte size bigger than _bytes size.
1 parent 5a89e34 commit b1e5484

File tree

7 files changed

+57
-86
lines changed

7 files changed

+57
-86
lines changed

Netick/Editor/Netick.Unity.Editor.dll

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

Netick/Runtime/Netick.Unity.dll

0 Bytes
Binary file not shown.

Netick/Runtime/Netick.dll

0 Bytes
Binary file not shown.

Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ MonoBehaviour:
1212
m_Script: {fileID: 11500000, guid: 5b519f64e02c1ed48a5a00039c4f6c4e, type: 3}
1313
m_Name: LiteNetLibTransportProvider
1414
m_EditorClassIdentifier:
15+
DisconnectTimeout: 5
16+
ReconnectInterval: 0.5
17+
MaxConnectAttempts: 10
18+
UpdateInterval: 0.015

Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs

Lines changed: 52 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using UnityEngine;
66
using System.Net;
77
using System.Net.Sockets;
8-
using System.Runtime;
98
using System;
109
using Netick.Unity;
1110

@@ -14,7 +13,16 @@ namespace Netick.Transport
1413
[CreateAssetMenu(fileName = "LiteNetLibTransportProvider", menuName = "Netick/Transport/LiteNetLibTransportProvider", order = 1)]
1514
public class LiteNetLibTransportProvider : NetworkTransportProvider
1615
{
17-
public override NetworkTransport MakeTransportInstance() => new LiteNetLibTransport();
16+
[Tooltip("Time duration (in seconds) until a connection is dropped when no packets were received.")]
17+
public float DisconnectTimeout = 5;
18+
[Tooltip("Time interval (in seconds) between connection attempts.")]
19+
public float ReconnectInterval = 0.5f;
20+
[Tooltip("Max number of connect attempts.")]
21+
public int MaxConnectAttempts = 10;
22+
[Tooltip("LiteNetLib internal logic update interval (in seconds).")]
23+
public float UpdateInterval = 0.015f;
24+
25+
public override NetworkTransport MakeTransportInstance() => new LiteNetLibTransport(this);
1826
}
1927

2028
public class LiteNetLibTransport : NetworkTransport, INetEventListener
@@ -44,37 +52,46 @@ public unsafe override void SendUserData(IntPtr ptr, int length, TransportDelive
4452

4553
private unsafe void SendLNL(byte* ptr, int length, DeliveryMethod deliveryMethod)
4654
{
55+
if (Transport._bytes.Length < length)
56+
Transport._bytes = new byte[length];
57+
4758
for (int i = 0; i < length; i++)
4859
Transport._bytes[i] = ptr[i];
4960
LNLPeer.Send(Transport._bytes, 0, length, deliveryMethod);
5061
}
5162
}
5263

64+
private LiteNetLibTransportProvider _provider;
5365
private NetManager _netManager;
5466
private BitBuffer _buffer;
5567

56-
private readonly byte[] _bytes = new byte[2048];
68+
private byte[] _bytes = new byte[2048];
5769
private readonly byte[] _connectionBytes = new byte[200];
5870

5971
private int _port;
60-
private bool _isServer = false;
61-
private Dictionary<NetPeer, LNLConnection> _clients = new Dictionary<NetPeer, LNLConnection>();
62-
private Queue<LNLConnection> _freeClients = new Queue<LNLConnection>();
72+
private Dictionary<NetPeer, LNLConnection> _clients = new Dictionary<NetPeer, LNLConnection>();
73+
private Queue<LNLConnection> _freeClients = new Queue<LNLConnection>();
6374

64-
// LAN Matchmaking
65-
private List<Session> _sessions = new List<Session>();
66-
private NetDataWriter _writer = new NetDataWriter();
75+
// LAN Discovery
76+
private List<Session> _sessions = new List<Session>();
77+
private NetDataWriter _writer = new NetDataWriter();
6778
private string _machineName;
6879

69-
public override void Init()
80+
public LiteNetLibTransport(LiteNetLibTransportProvider provider)
7081
{
71-
_buffer = new BitBuffer(createChunks: false);
72-
// _bufferSize = 875 * 4;
73-
74-
_netManager = new NetManager((INetEventListener)this) { AutoRecycle = true };
75-
_machineName = Environment.MachineName;
76-
//_netManager.DisconnectTimeout = 1000;
82+
this._provider = provider;
83+
}
7784

85+
public override void Init()
86+
{
87+
_buffer = new BitBuffer(createChunks: false);
88+
_netManager = new NetManager((INetEventListener)this) { AutoRecycle = true };
89+
_machineName = Environment.MachineName;
90+
_netManager.DisconnectTimeout = (int)( _provider.DisconnectTimeout * 1000);
91+
_netManager.ReconnectDelay = (int)(_provider.ReconnectInterval * 1000);
92+
_netManager.MaxConnectAttempts = _provider.MaxConnectAttempts;
93+
_netManager.UpdateTime = (int)(_provider.UpdateInterval * 1000);
94+
7895
for (int i = 0; i < Engine.Config.MaxPlayers; i++)
7996
_freeClients.Enqueue(new LNLConnection(this));
8097
}
@@ -95,14 +112,12 @@ public override void Run(RunMode mode, int port)
95112
{
96113
_netManager.UnconnectedMessagesEnabled = true;
97114
_netManager.Start();
98-
_isServer = false;
99115
}
100116

101117
else
102118
{
103119
_netManager.BroadcastReceiveEnabled = true;
104120
_netManager.Start(port);
105-
_isServer = true;
106121
}
107122

108123
_port = port;
@@ -124,37 +139,17 @@ public override void Connect(string address, int port, byte[] connectionData, in
124139
}
125140
else
126141
{
127-
_writer.Reset();
128-
_writer.Put(connectionData, 0, connectionDataLen);
142+
_writer. Reset();
143+
_writer. Put(connectionData, 0, connectionDataLen);
129144
_netManager.Connect(address, port, _writer);
130145
}
131-
132-
133146
}
134147

135148
public override void Disconnect(TransportConnection connection)
136149
{
137150
_netManager.DisconnectPeer(((LNLConnection)connection).LNLPeer);
138151
}
139152

140-
//public override void HostMatch(string name)
141-
//{
142-
143-
//}
144-
145-
//public override void UpdateMatchList()
146-
//{
147-
// if (!_netManager.IsRunning)
148-
// _netManager.Start();
149-
150-
// _sessions.Clear();
151-
// _writer.Reset();
152-
// _writer.Put(NetickConfig.LAN_DISCOVERY);
153-
// _netManager.SendBroadcast(_writer, _port);
154-
//}
155-
156-
/// ////////////////////////////////////////////
157-
158153
void INetEventListener.OnConnectionRequest(ConnectionRequest request)
159154
{
160155
if (_clients.Count >= Engine.Config.MaxPlayers)
@@ -163,7 +158,7 @@ void INetEventListener.OnConnectionRequest(ConnectionRequest request)
163158
return;
164159
}
165160

166-
int len = request.Data.AvailableBytes;
161+
int len = request.Data.AvailableBytes;
167162
request.Data.GetBytes(_connectionBytes, 0, len);
168163
bool accepted = NetworkPeer.OnConnectRequest(_connectionBytes, len, request.RemoteEndPoint.ToNetickEndPoint());
169164

@@ -175,26 +170,32 @@ void INetEventListener.OnConnectionRequest(ConnectionRequest request)
175170

176171
void INetEventListener.OnPeerConnected(NetPeer peer)
177172
{
178-
var connection = _freeClients.Dequeue();
173+
var connection = _freeClients.Dequeue();
179174
connection.LNLPeer = peer;
180175

181-
_clients.Add(peer, connection);
176+
_clients. Add(peer, connection);
182177
NetworkPeer.OnConnected(connection);
183178
}
184179

185180
void INetEventListener.OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo)
186181
{
187-
if (!_isServer)
182+
if (!Engine.IsServer)
188183
{
189-
if (disconnectInfo.Reason == DisconnectReason.ConnectionRejected || disconnectInfo.Reason == DisconnectReason.ConnectionFailed)
184+
if (disconnectInfo.Reason == DisconnectReason.ConnectionRejected)
190185
{
191186
NetworkPeer.OnConnectFailed(ConnectionFailedReason.Refused);
192187
return;
193188
}
194189

190+
if (disconnectInfo.Reason == DisconnectReason.ConnectionFailed || disconnectInfo.Reason == DisconnectReason.Timeout)
191+
{
192+
NetworkPeer.OnConnectFailed(ConnectionFailedReason.Timeout);
193+
return;
194+
}
195+
195196
if (peer == null)
196197
{
197-
Debug.Log($"ERROR: {disconnectInfo.Reason}");
198+
Debug.Log($"LiteNetLib Network Error: {disconnectInfo.Reason}");
198199
NetworkPeer.OnConnectFailed(ConnectionFailedReason.Refused);
199200
return;
200201
}
@@ -210,9 +211,9 @@ void INetEventListener.OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnec
210211
{
211212
TransportDisconnectReason reason = disconnectInfo.Reason == DisconnectReason.Timeout ? TransportDisconnectReason.Timeout : TransportDisconnectReason.Shutdown;
212213

213-
NetworkPeer.OnDisconnected(_clients[peer], reason);
214+
NetworkPeer. OnDisconnected(_clients[peer], reason);
214215
_freeClients.Enqueue(_clients[peer]);
215-
_clients.Remove(peer);
216+
_clients. Remove(peer);
216217
}
217218
}
218219

@@ -221,61 +222,27 @@ unsafe void INetEventListener.OnNetworkReceive(NetPeer peer, NetPacketReader rea
221222
if (_clients.TryGetValue(peer, out var c))
222223
{
223224
var len = reader.AvailableBytes;
224-
reader.GetBytes(_bytes, 0, reader.AvailableBytes);
225+
reader. GetBytes(_bytes, 0, reader.AvailableBytes);
225226

226227
fixed(byte* ptr = _bytes)
227228
{
228-
_buffer.SetFrom(ptr, len, _bytes.Length);
229+
_buffer. SetFrom(ptr, len, _bytes.Length);
229230
NetworkPeer.Receive(c, _buffer);
230231
}
231232
}
232233
}
233234

234-
235235
void INetEventListener.OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType)
236236
{
237-
//ulong msgType = reader.GetULong();
238-
239-
//if (msgType == NetickConfig.LAN_DISCOVERY_RESPONSE)
240-
//{
241-
// string name = reader.GetString();
242-
// int port = reader.GetInt();
243-
244-
// var newSession = new Session()
245-
// {
246-
// Name = name,
247-
// IP = remoteEndPoint.Address.ToString(),
248-
// Port = port
249-
// };
250-
251-
// if (!_sessions.Contains(newSession))
252-
// _sessions.Add(newSession);
253-
254-
// OnMatchListUpdate(_sessions);
255-
//}
256-
257-
//else if (_isServer && msgType == NetickConfig.LAN_DISCOVERY)
258-
//{
259-
// _writer.Reset();
260-
// _writer.Put(NetickConfig.LAN_DISCOVERY_RESPONSE);
261-
// _writer.Put(_machineName);
262-
// _writer.Put(_port);
263-
264-
// _netManager.SendUnconnectedMessage(_writer, remoteEndPoint);
265-
//}
266237
}
267238

268-
269239
void INetEventListener.OnNetworkError(IPEndPoint endPoint, SocketError socketError)
270240
{
271-
Debug.Log("[S] NetworkError: " + socketError);
241+
Debug.Log("LiteNetLib Network Error: " + socketError);
272242
NetworkPeer.OnConnectFailed(ConnectionFailedReason.Refused);
273243
}
274244

275245
void INetEventListener.OnNetworkLatencyUpdate(NetPeer peer, int latency) { }
276-
277-
278-
279246
}
280247

281248

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.karrar.netick",
3-
"version": "0.12.22",
3+
"version": "0.12.23",
44
"displayName": "Netick",
55
"description": "A networking solution for Unity",
66
"unity": "2021.3",

0 commit comments

Comments
 (0)