diff --git a/Ragon.SimpleServer/Source/Plugins/SimplePlugin.cs b/Ragon.SimpleServer/Source/Plugins/SimplePlugin.cs index 742b237..483057c 100755 --- a/Ragon.SimpleServer/Source/Plugins/SimplePlugin.cs +++ b/Ragon.SimpleServer/Source/Plugins/SimplePlugin.cs @@ -17,12 +17,12 @@ namespace Game.Source public override void OnPlayerJoined(Player player) { - _logger.Info($"Player({player.PlayerName}) joined to Room({GameRoom.Id})"); + // _logger.Info($"Player({player.PlayerName}) joined to Room({GameRoom.Id})"); } public override void OnPlayerLeaved(Player player) { - _logger.Info($"Player({player.PlayerName}) left from Room({GameRoom.Id})"); + // _logger.Info($"Player({player.PlayerName}) left from Room({GameRoom.Id})"); } } } \ No newline at end of file diff --git a/Ragon.Stress/Program.cs b/Ragon.Stress/Program.cs new file mode 100644 index 0000000..842438d --- /dev/null +++ b/Ragon.Stress/Program.cs @@ -0,0 +1,258 @@ +using System; +using ENet; +using Ragon.Common; + +namespace Stress +{ + class SimulationClient + { + public Host Host; + public Peer Peer; + public bool InRoom; + public List Entities = new List(); + } + + class SimulationThread + { + private List _clients = new List(); + + public void Start(string url, ushort port, int numClients) + { + for (var i = 0; i < numClients; i++) + { + var client = CreateClient(url, port); + _clients.Add(client); + } + + var thread = new Thread(Execute); + thread.IsBackground = true; + thread.Start(); + } + + public void Execute() + { + var ragonSerializer = new RagonSerializer(); + + while (true) + { + foreach (SimulationClient simulationClient in _clients) + { + bool polled = false; + Event netEvent; + + while (!polled) + { + if (simulationClient.Host.CheckEvents(out netEvent) <= 0) + { + if (simulationClient.Host.Service(0, out netEvent) <= 0) + break; + + polled = true; + } + + switch (netEvent.Type) + { + case EventType.None: + break; + case EventType.Connect: + { + ragonSerializer.Clear(); + ragonSerializer.WriteOperation(RagonOperation.AUTHORIZE); + ragonSerializer.WriteString("defaultkey"); + ragonSerializer.WriteString("Player " + DateTime.Now.Ticks); + ragonSerializer.WriteByte(0); + + var sendData = ragonSerializer.ToArray(); + var packet = new Packet(); + packet.Create(sendData, PacketFlags.Reliable); + simulationClient.Peer.Send(0, ref packet); + Console.WriteLine("Client connected to server"); + break; + } + case EventType.Disconnect: + Console.WriteLine("Client disconnected from server"); + break; + case EventType.Timeout: + Console.WriteLine("Client connection timeout"); + break; + case EventType.Receive: + var data = new byte[netEvent.Packet.Length]; + netEvent.Packet.CopyTo(data); + + var op = (RagonOperation) data[0]; + switch (op) + { + case RagonOperation.AUTHORIZED_SUCCESS: + { + ragonSerializer.Clear(); + ragonSerializer.WriteOperation(RagonOperation.JOIN_OR_CREATE_ROOM); + ragonSerializer.WriteInt(2); + ragonSerializer.WriteInt(20); + ragonSerializer.WriteString("map"); + + var sendData = ragonSerializer.ToArray(); + var packet = new Packet(); + packet.Create(sendData, PacketFlags.Reliable); + simulationClient.Peer.Send(0, ref packet); + break; + } + case RagonOperation.JOIN_SUCCESS: + { + simulationClient.InRoom = true; + + ragonSerializer.Clear(); + ragonSerializer.WriteOperation(RagonOperation.SCENE_IS_LOADED); + + var sendData = ragonSerializer.ToArray(); + var packet = new Packet(); + packet.Create(sendData, PacketFlags.Reliable); + simulationClient.Peer.Send(0, ref packet); + + break; + } + case RagonOperation.SNAPSHOT: + { + ragonSerializer.Clear(); + ragonSerializer.WriteOperation(RagonOperation.CREATE_ENTITY); + ragonSerializer.WriteUShort(0); + ragonSerializer.WriteUShort(0); + ragonSerializer.WriteUShort(0); + + var sendData = ragonSerializer.ToArray(); + var packet = new Packet(); + packet.Create(sendData, PacketFlags.Reliable); + simulationClient.Peer.Send(0, ref packet); + break; + } + case RagonOperation.CREATE_ENTITY: + { + ReadOnlySpan payload = data.AsSpan().Slice(1, data.Length - 1); + ragonSerializer.Clear(); + ragonSerializer.FromSpan(ref payload); + + var entityType = ragonSerializer.ReadUShort(); + var state = ragonSerializer.ReadByte(); + var ennt = ragonSerializer.ReadByte(); + var entityId = ragonSerializer.ReadInt(); + + simulationClient.Entities.Add(entityId); + break; + } + } + Console.WriteLine(op); + // Console.WriteLine("Packet received from server - Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length); + netEvent.Packet.Dispose(); + break; + } + } + + if (simulationClient.InRoom) + { + foreach (var entity in simulationClient.Entities) + { + ragonSerializer.Clear(); + ragonSerializer.WriteOperation(RagonOperation.REPLICATE_ENTITY_STATE); + ragonSerializer.WriteInt(entity); + ragonSerializer.WriteInt(100); + ragonSerializer.WriteInt(200); + ragonSerializer.WriteInt(300); + + var sendData = ragonSerializer.ToArray(); + var packet = new Packet(); + packet.Create(sendData, PacketFlags.Instant); + simulationClient.Peer.Send(1, ref packet); + } + } + } + + Thread.Sleep(16); + } + } + + SimulationClient CreateClient(string url, ushort port) + { + Host client = new Host(); + Address address = new Address(); + + address.SetHost(url); + address.Port = port; + + client.Create(); + Console.WriteLine("Created client"); + + Peer peer = client.Connect(address); + + return new SimulationClient() {Host = client, Peer = peer}; + } + } + + class Program + { + static void Main(string[] args) + { + Library.Initialize(); + + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + { + var thread = new SimulationThread(); + thread.Start("127.0.0.1", 4444, 250); + } + + Thread.Sleep(3000); + + + Console.ReadKey(); + Library.Deinitialize(); + } + } +} \ No newline at end of file diff --git a/Ragon/Sources/Application.cs b/Ragon/Sources/Application.cs index 0736cdd..330db28 100755 --- a/Ragon/Sources/Application.cs +++ b/Ragon/Sources/Application.cs @@ -11,26 +11,25 @@ namespace Ragon.Core { private readonly Logger _logger = LogManager.GetCurrentClassLogger(); private readonly GameThread _gameThread; - + private readonly ENetServer _netServer; public Application(PluginFactory factory, Configuration configuration) { - ThreadPool.SetMinThreads(1, 1); - _gameThread = new GameThread(factory, configuration); } public void Start() { Library.Initialize(); - _gameThread.Start(); + _logger.Info("Started"); } public void Stop() { _gameThread.Stop(); - Library.Deinitialize(); + _logger.Info("Stopped"); + } } } \ No newline at end of file diff --git a/Ragon/Sources/Authorization/AuthorizationManager.cs b/Ragon/Sources/Authorization/AuthorizationManager.cs index fbcd2d8..2f04592 100644 --- a/Ragon/Sources/Authorization/AuthorizationManager.cs +++ b/Ragon/Sources/Authorization/AuthorizationManager.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; +using NLog.Targets; using Ragon.Common; namespace Ragon.Core; @@ -25,9 +27,12 @@ public class AuthorizationManager : IAuthorizationManager public void OnAuthorization(uint peerId, string key, string name, byte protocol) { - var dispatcher = _gameThread.GetDispatcher(); + var dispatcher = _gameThread.Dispatcher; _provider.OnAuthorizationRequest(key, name, protocol, Array.Empty(), - (playerId, playerName) => { dispatcher.Dispatch(() => Accepted(peerId, playerId, playerName)); }, + (playerId, playerName) => + { + dispatcher.Dispatch(() => Accepted(peerId, playerId, playerName)); + }, (errorCode) => { dispatcher.Dispatch(() => Rejected(peerId, errorCode)); }); } @@ -37,7 +42,7 @@ public class AuthorizationManager : IAuthorizationManager _serializer.WriteOperation(RagonOperation.AUTHORIZED_SUCCESS); _serializer.WriteString(playerId); _serializer.WriteString(playerName); - + var player = new Player() { Id = playerId, @@ -52,7 +57,7 @@ public class AuthorizationManager : IAuthorizationManager _playersByPeers.Add(peerId, player); var sendData = _serializer.ToArray(); - _gameThread.SendSocketEvent(new SocketEvent() {Data = sendData, PeerId = peerId, Type = EventType.DATA, Delivery = DeliveryType.Reliable}); + _gameThread.Server.Send(peerId, sendData, DeliveryType.Reliable); } public void Rejected(uint peerId, uint code) @@ -62,9 +67,8 @@ public class AuthorizationManager : IAuthorizationManager _serializer.WriteInt((int) code); var sendData = _serializer.ToArray(); - _gameThread.SendSocketEvent(new SocketEvent() {Data = sendData, PeerId = peerId, Type = EventType.DATA, Delivery = DeliveryType.Reliable}); - var emtpyData = Array.Empty(); - _gameThread.SendSocketEvent(new SocketEvent() {Data = emtpyData, PeerId = peerId, Type = EventType.DISCONNECTED, Delivery = DeliveryType.Reliable}); + _gameThread.Server.Send(peerId, sendData, DeliveryType.Reliable); + _gameThread.Server.Disconnect(peerId, 0); } public void Cleanup(uint peerId) diff --git a/Ragon/Sources/Game/GameRoom.cs b/Ragon/Sources/Game/GameRoom.cs index 7a63621..57ca38e 100755 --- a/Ragon/Sources/Game/GameRoom.cs +++ b/Ragon/Sources/Game/GameRoom.cs @@ -22,7 +22,7 @@ namespace Ragon.Core private uint _ticks; private readonly PluginBase _plugin; - private readonly IGameThread _sender; + private readonly IGameThread _gameThread; private readonly RagonSerializer _serializer = new(512); // Cache @@ -30,9 +30,9 @@ namespace Ragon.Core private uint[] _allPlayers = Array.Empty(); private Entity[] _entitiesAll = Array.Empty(); - public GameRoom(IGameThread sender, PluginBase pluginBase, string map, int min, int max) + public GameRoom(IGameThread gameThread, PluginBase pluginBase, string map, int min, int max) { - _sender = sender; + _gameThread = gameThread; _plugin = pluginBase; Map = map; @@ -367,40 +367,22 @@ namespace Ragon.Core public void Send(uint peerId, byte[] rawData, DeliveryType deliveryType = DeliveryType.Unreliable) { - _sender.SendSocketEvent(new SocketEvent() - { - PeerId = peerId, - Data = rawData, - Type = EventType.DATA, - Delivery = deliveryType, - }); + _gameThread.Server.Send(peerId, rawData, deliveryType); } public void Broadcast(uint[] peersIds, byte[] rawData, DeliveryType deliveryType = DeliveryType.Unreliable) { foreach (var peer in peersIds) { - _sender.SendSocketEvent(new SocketEvent() - { - PeerId = peer, - Data = rawData, - Type = EventType.DATA, - Delivery = deliveryType, - }); + _gameThread.Server.Send(peer, rawData, deliveryType); } } public void Broadcast(byte[] rawData, DeliveryType deliveryType = DeliveryType.Unreliable) { - foreach (var player in _players.Values.ToArray()) + foreach (var peer in _allPlayers) { - _sender.SendSocketEvent(new SocketEvent() - { - PeerId = player.PeerId, - Data = rawData, - Type = EventType.DATA, - Delivery = deliveryType, - }); + _gameThread.Server.Send(peer, rawData, deliveryType); } } } diff --git a/Ragon/Sources/Game/GameThread.cs b/Ragon/Sources/Game/GameThread.cs index 096bf9b..fff1196 100755 --- a/Ragon/Sources/Game/GameThread.cs +++ b/Ragon/Sources/Game/GameThread.cs @@ -2,36 +2,41 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; +using ENet; using NLog; namespace Ragon.Core { - public class GameThread : IGameThread + public class GameThread : IGameThread, IHandler { private readonly Dictionary _socketByRooms; private readonly RoomManager _roomManager; - private readonly ENetServer _socketServer; + private readonly ISocketServer _server; private readonly Thread _thread; private readonly Server _serverConfiguration; private readonly Stopwatch _gameLoopTimer; private readonly Lobby _lobby; - private readonly IDispatcher _dispatcher; private readonly ILogger _logger = LogManager.GetCurrentClassLogger(); private readonly float _deltaTime = 0.0f; - - private int _packets = 0; private readonly Stopwatch _packetsTimer; + private int _packets = 0; + + public IDispatcher Dispatcher { get; private set; } + public ISocketServer Server { get; private set; } + public GameThread(PluginFactory factory, Configuration configuration) { var authorizationProvider = factory.CreateAuthorizationProvider(configuration); - + + Dispatcher = new Dispatcher(); + Server = new ENetServer(this); + _serverConfiguration = configuration.Server; _deltaTime = 1000.0f / configuration.TickRate; - - _dispatcher = new Dispatcher(); + _roomManager = new RoomManager(factory, this); _lobby = new Lobby(authorizationProvider, _roomManager, this); - _socketServer = new ENetServer(); + _gameLoopTimer = new Stopwatch(); _packetsTimer = new Stopwatch(); _socketByRooms = new Dictionary(); @@ -43,18 +48,19 @@ namespace Ragon.Core public void Start() { + Server.Start(_serverConfiguration.Port); + _gameLoopTimer.Start(); _packetsTimer.Start(); - - _socketServer.Start(_serverConfiguration.Port); _thread.Start(); } public void Stop() { + Server.Stop(); + _gameLoopTimer.Stop(); _packetsTimer.Stop(); - _socketServer.Stop(); _thread.Interrupt(); } @@ -62,41 +68,9 @@ namespace Ragon.Core { while (true) { - _dispatcher.Process(); + Server.Process(); + Dispatcher.Process(); - while (_socketServer.ReceiveBuffer.TryDequeue(out var evnt)) - { - if (evnt.Type == EventType.DISCONNECTED || evnt.Type == EventType.TIMEOUT) - { - if (_socketByRooms.Remove(evnt.PeerId, out var room)) - room.Leave(evnt.PeerId); - - _lobby.OnDisconnected(evnt.PeerId); - } - - if (evnt.Type == EventType.DATA) - { - _packets += 1; - try - { - var peerId = evnt.PeerId; - var data = new ReadOnlySpan(evnt.Data); - if (_socketByRooms.TryGetValue(evnt.PeerId, out var room)) - { - room.ProcessEvent(peerId, data); - } - else - { - _lobby.ProcessEvent(peerId, data); - } - } - catch (Exception exception) - { - _logger.Error(exception); - } - } - } - var elapsedMilliseconds = _gameLoopTimer.ElapsedMilliseconds; if (elapsedMilliseconds > _deltaTime) { @@ -125,14 +99,40 @@ namespace Ragon.Core _socketByRooms.Remove(peerId); } - public void SendSocketEvent(SocketEvent socketEvent) + public void OnEvent(Event evnt) { - _socketServer.SendBuffer.Enqueue(socketEvent); - } + if (evnt.Type == ENet.EventType.Timeout || evnt.Type == ENet.EventType.Disconnect) + { + if (_socketByRooms.Remove(evnt.Peer.ID, out var room)) + room.Leave(evnt.Peer.ID); - public IDispatcher GetDispatcher() - { - return _dispatcher; + _lobby.OnDisconnected(evnt.Peer.ID); + } + + if (evnt.Type == ENet.EventType.Receive) + { + _packets += 1; + try + { + var peerId = evnt.Peer.ID; + var dataRaw = new byte[evnt.Packet.Length]; + evnt.Packet.CopyTo(dataRaw); + + var data = new ReadOnlySpan(dataRaw); + if (_socketByRooms.TryGetValue(peerId, out var room)) + { + room.ProcessEvent(peerId, data); + } + else + { + _lobby.ProcessEvent(peerId, data); + } + } + catch (Exception exception) + { + _logger.Error(exception); + } + } } } } \ No newline at end of file diff --git a/Ragon/Sources/Game/IGameThread.cs b/Ragon/Sources/Game/IGameThread.cs index 5368a7f..8094084 100644 --- a/Ragon/Sources/Game/IGameThread.cs +++ b/Ragon/Sources/Game/IGameThread.cs @@ -6,6 +6,6 @@ public interface IGameThread { public void Attach(uint peerId, GameRoom room); public void Detach(uint peerId); - public void SendSocketEvent(SocketEvent socketEvent); - public IDispatcher GetDispatcher(); + public IDispatcher Dispatcher { get; } + public ISocketServer Server { get; } } \ No newline at end of file diff --git a/Ragon/Sources/Matchmaking/Matchmaking.cs b/Ragon/Sources/Room/RoomManager.cs similarity index 100% rename from Ragon/Sources/Matchmaking/Matchmaking.cs rename to Ragon/Sources/Room/RoomManager.cs diff --git a/Ragon/Sources/Server/ENetServer.cs b/Ragon/Sources/Server/ENetServer.cs index aa23d37..6851591 100755 --- a/Ragon/Sources/Server/ENetServer.cs +++ b/Ragon/Sources/Server/ENetServer.cs @@ -17,130 +17,102 @@ namespace Ragon.Core Connected } - public class ENetServer + public class ENetServer : ISocketServer { public Status Status { get; private set; } private ILogger _logger = LogManager.GetCurrentClassLogger(); - private Thread _thread; private Host _host; private Address _address; - private ENet.Event _netEvent; + private Event _netEvent; private Peer[] _peers; - private int _seconds = 0; - private Stopwatch _packetsTimer; - public RingBuffer SendBuffer; - public RingBuffer ReceiveBuffer; - + private IHandler _handler; + + public ENetServer(IHandler handler) + { + _handler = handler; + } + public void Start(ushort port) { _address = default; _address.Port = port; + _peers = new Peer[2048]; _host = new Host(); - _host.Create(_address, 4095, 2, 0, 0, 1024 * 1024); - - _peers = new Peer[4095]; - - ReceiveBuffer = new RingBuffer(8192 + 8192); - SendBuffer = new RingBuffer(8192 + 8192); + _host.Create(_address, 2048, 2, 0, 0, 1024 * 1024); Status = Status.Listening; - _packetsTimer = new Stopwatch(); - _thread = new Thread(Execute); - _thread.Name = "NetworkThread"; - _thread.Start(); _logger.Info($"Network listening on {port}"); } - private void Execute() + public void Send(uint peerId, byte[] data, DeliveryType type) { - _packetsTimer.Start(); - while (true) + var newPacket = new Packet(); + var packetFlags = PacketFlags.Instant; + byte channel = 1; + + if (type == DeliveryType.Reliable) { - while (SendBuffer.TryDequeue(out var data)) + packetFlags = PacketFlags.Reliable; + channel = 0; + } + else if (type == DeliveryType.Unreliable) + { + channel = 1; + packetFlags = PacketFlags.None; + } + + newPacket.Create(data, data.Length, packetFlags); + _peers[peerId].Send(channel, ref newPacket); + } + + public void Disconnect(uint peerId, uint errorCode) + { + _peers[peerId].Reset(); + } + + public void Process() + { + bool polled = false; + while (!polled) + { + if (_host.CheckEvents(out _netEvent) <= 0) { - if (data.Type == EventType.DATA) - { - var newPacket = new Packet(); - var packetFlags = PacketFlags.Instant; - byte channel = 1; + if (_host.Service(0, out _netEvent) <= 0) + break; - if (data.Delivery == DeliveryType.Reliable) - { - packetFlags = PacketFlags.Reliable; - channel = 0; - } - else if (data.Delivery == DeliveryType.Unreliable) - { - channel = 1; - packetFlags = PacketFlags.Instant; - } - - newPacket.Create(data.Data, data.Data.Length, packetFlags); - _peers[data.PeerId].Send(channel, ref newPacket); - } - else if (data.Type == EventType.DISCONNECTED) - { - _peers[data.PeerId].DisconnectNow(0); - ReceiveBuffer.Enqueue(data); - } - } - - bool polled = false; - while (!polled) - { - if (_host.CheckEvents(out _netEvent) <= 0) - { - if (_host.Service(15, out _netEvent) <= 0) - break; - - polled = true; - } - - switch (_netEvent.Type) - { - case ENet.EventType.None: - Console.WriteLine("None event"); - break; - - case ENet.EventType.Connect: - { - var @event = new SocketEvent {PeerId = _netEvent.Peer.ID, Type = EventType.CONNECTED}; - _peers[_netEvent.Peer.ID] = _netEvent.Peer; - ReceiveBuffer.Enqueue(@event); - break; - } - case ENet.EventType.Disconnect: - { - var @event = new SocketEvent {PeerId = _netEvent.Peer.ID, Type = EventType.DISCONNECTED}; - ReceiveBuffer.Enqueue(@event); - break; - } - case ENet.EventType.Timeout: - { - var @event = new SocketEvent {PeerId = _netEvent.Peer.ID, Type = EventType.TIMEOUT}; - ReceiveBuffer.Enqueue(@event); - break; - } - case ENet.EventType.Receive: - { - var data = new byte[_netEvent.Packet.Length]; - - _netEvent.Packet.CopyTo(data); - _netEvent.Packet.Dispose(); - - var @event = new SocketEvent {PeerId = _netEvent.Peer.ID, Type = EventType.DATA, Data = data }; - ReceiveBuffer.Enqueue(@event); - break; - } - } + polled = true; } - if (_packetsTimer.Elapsed.Seconds > 5) + switch (_netEvent.Type) { - Console.WriteLine($"Connections: {_host.PeersCount}"); - _packetsTimer.Restart(); + case ENet.EventType.None: + Console.WriteLine("None event"); + break; + + case ENet.EventType.Connect: + { + _peers[_netEvent.Peer.ID] = _netEvent.Peer; + _handler.OnEvent(_netEvent); + break; + } + case ENet.EventType.Disconnect: + { + _handler.OnEvent(_netEvent); + break; + } + case ENet.EventType.Timeout: + { + _handler.OnEvent(_netEvent); + break; + } + case ENet.EventType.Receive: + { + _handler.OnEvent(_netEvent); + _netEvent.Packet.Dispose(); + break; + } } } } diff --git a/Ragon/Sources/Server/ISocketHandler.cs b/Ragon/Sources/Server/ISocketHandler.cs new file mode 100644 index 0000000..eb8df6b --- /dev/null +++ b/Ragon/Sources/Server/ISocketHandler.cs @@ -0,0 +1,8 @@ +using ENet; + +namespace Ragon.Core; + +public interface IHandler +{ + public void OnEvent(Event evnt); +} \ No newline at end of file diff --git a/Ragon/Sources/Server/ISocketServer.cs b/Ragon/Sources/Server/ISocketServer.cs new file mode 100644 index 0000000..d797f86 --- /dev/null +++ b/Ragon/Sources/Server/ISocketServer.cs @@ -0,0 +1,10 @@ +namespace Ragon.Core; + +public interface ISocketServer +{ + public void Start(ushort port); + public void Process(); + public void Stop(); + public void Send(uint peerId, byte[] data, DeliveryType type); + public void Disconnect(uint peerId, uint errorCode); +} \ No newline at end of file diff --git a/ThirdParty/ENet-CSharp/ENet-CSharp.dll b/ThirdParty/ENet-CSharp/ENet-CSharp.dll deleted file mode 100644 index 0f3f9ca..0000000 Binary files a/ThirdParty/ENet-CSharp/ENet-CSharp.dll and /dev/null differ diff --git a/ThirdParty/ENet-CSharp/enet.dll b/ThirdParty/ENet-CSharp/enet.dll deleted file mode 100644 index 3f329c4..0000000 Binary files a/ThirdParty/ENet-CSharp/enet.dll and /dev/null differ diff --git a/ThirdParty/ENet-CSharp/libenet.dylib b/ThirdParty/ENet-CSharp/libenet.dylib deleted file mode 100755 index 2c8d6f3..0000000 Binary files a/ThirdParty/ENet-CSharp/libenet.dylib and /dev/null differ diff --git a/ThirdParty/ENet-CSharp/libenet.so b/ThirdParty/ENet-CSharp/libenet.so deleted file mode 100644 index 1617ec6..0000000 Binary files a/ThirdParty/ENet-CSharp/libenet.so and /dev/null differ