wip
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user