This commit is contained in:
2023-10-04 14:42:59 +03:00
parent 27db256902
commit 8788cb0fcf
57 changed files with 914 additions and 78 deletions
+32 -15
View File
@@ -21,19 +21,19 @@ using Ragon.Server.IO;
namespace Ragon.Server.ENet
{
public sealed class ENetServer: INetworkServer
public sealed class ENetServer : INetworkServer
{
public Executor Executor => _executor;
private readonly Host _host;
private readonly ILogger _logger = LogManager.GetCurrentClassLogger();
private ENetConnection[] _connections;
private INetworkListener _listener;
private uint _protocol;
private Event _event;
private global::ENet.Event _event;
private Executor _executor;
public ENetServer()
{
_host = new Host();
@@ -44,15 +44,15 @@ namespace Ragon.Server.ENet
public void Start(INetworkListener listener, NetworkConfiguration configuration)
{
Library.Initialize();
_connections = new ENetConnection[configuration.LimitConnections];
_listener = listener;
_protocol = configuration.Protocol;
var address = new Address
{
Port = (ushort) configuration.Port,
Port = (ushort)configuration.Port,
};
_host.Create(address, _connections.Length, 2, 0, 0, 1024 * 1024);
@@ -74,7 +74,7 @@ namespace Ragon.Server.ENet
polled = true;
}
switch (_event.Type)
{
case EventType.None:
@@ -90,8 +90,9 @@ namespace Ragon.Server.ENet
_event.Peer.DisconnectNow(0);
break;
}
var connection = new ENetConnection(_event.Peer);
_connections[_event.Peer.ID] = connection;
_listener.OnConnected(connection);
break;
@@ -110,13 +111,13 @@ namespace Ragon.Server.ENet
}
case EventType.Receive:
{
var peerId = (ushort) _event.Peer.ID;
var peerId = (ushort)_event.Peer.ID;
var connection = _connections[peerId];
var dataRaw = new byte[_event.Packet.Length];
_event.Packet.CopyTo(dataRaw);
_event.Packet.Dispose();
_listener.OnData(connection, dataRaw);
break;
}
@@ -124,10 +125,26 @@ namespace Ragon.Server.ENet
}
}
public void BroadcastReliable(byte[] data)
{
var packet = new Packet();
packet.Create(data, PacketFlags.Reliable);
_host.Broadcast(0, ref packet);
}
public void BroadcastUnreliable(byte[] data)
{
var packet = new Packet();
packet.Create(data, PacketFlags.None);
_host.Broadcast(1, ref packet);
}
public void Stop()
{
_host?.Dispose();
Library.Deinitialize();
}