wip
This commit is contained in:
@@ -28,6 +28,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ENet-CSharp" Version="2.4.8" />
|
||||
<PackageReference Include="Google.Protobuf" Version="3.29.0" />
|
||||
<PackageReference Include="MsgPack.Cli" Version="1.0.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.2" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -9,10 +9,11 @@ public class RelayRoomPlugin: BaseRoomPlugin
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnAttached()
|
||||
{
|
||||
Console.WriteLine("Room attached");
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void OnDetached()
|
||||
|
||||
@@ -1,10 +1,35 @@
|
||||
using Ragon.Server;
|
||||
using Ragon.Server.Lobby;
|
||||
using Ragon.Server.Plugin;
|
||||
using Ragon.Server.Time;
|
||||
|
||||
namespace Ragon.Relay
|
||||
{
|
||||
public class RelayServerPlugin : BaseServerPlugin
|
||||
{
|
||||
private RelayConfiguration _relayConfiguration;
|
||||
private RagonScheduler _scheduler;
|
||||
private RagonConnectionRegistry _connectionRegistry;
|
||||
private IRagonLobby _lobby;
|
||||
private Reporter _reporter;
|
||||
|
||||
public RelayServerPlugin(RelayConfiguration config)
|
||||
{
|
||||
_relayConfiguration = config;
|
||||
}
|
||||
|
||||
public override void OnAttached(IRagonServer server)
|
||||
{
|
||||
base.OnAttached(server);
|
||||
|
||||
_lobby = server.Lobby;
|
||||
_connectionRegistry = server.ConnectionRegistry;
|
||||
_scheduler = server.Scheduler;
|
||||
_reporter = new Reporter(_relayConfiguration, server, "127.0.0.1", 5000);
|
||||
|
||||
server.Scheduler.Run(new RagonActionTimer(() => _reporter.Done(), 1, -1));
|
||||
}
|
||||
|
||||
public override bool OnCommand(string command, string payload)
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using Ragon.Server.Logging;
|
||||
|
||||
namespace Ragon.Relay;
|
||||
|
||||
public class Client
|
||||
{
|
||||
private readonly UdpClient _udpClient;
|
||||
private readonly IPEndPoint _endpoint;
|
||||
private readonly IRagonLogger _logger;
|
||||
|
||||
public Client(string host, int port)
|
||||
{
|
||||
_logger = LoggerManager.GetLogger("Client");
|
||||
_udpClient = new UdpClient();
|
||||
_endpoint = new IPEndPoint(IPAddress.Parse(host), port);
|
||||
}
|
||||
|
||||
public void Send(byte[] data)
|
||||
{
|
||||
try
|
||||
{
|
||||
_udpClient.BeginSend(data, data.Length, _endpoint, SendCallback, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void SendCallback(IAsyncResult ar)
|
||||
{
|
||||
try
|
||||
{
|
||||
_udpClient.EndSend(ar);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,56 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.Collections;
|
||||
using Ragon.Server;
|
||||
|
||||
namespace Ragon.Relay;
|
||||
|
||||
public class Reporter
|
||||
{
|
||||
private readonly Client _client;
|
||||
private readonly IRagonServer _server;
|
||||
private readonly RelayConfiguration _configuration;
|
||||
|
||||
public Reporter(
|
||||
RelayConfiguration relayConfiguration,
|
||||
IRagonServer server,
|
||||
string host,
|
||||
int port
|
||||
)
|
||||
{
|
||||
_client = new Client(host, port);
|
||||
_server = server;
|
||||
_configuration = relayConfiguration;
|
||||
}
|
||||
|
||||
public void Done()
|
||||
{
|
||||
for (var i = 0; i < 10; i++)
|
||||
{
|
||||
var message = new Data();
|
||||
message.Statistics = new Statistics()
|
||||
{
|
||||
Connections = _server.ConnectionRegistry.Contexts.Count,
|
||||
ConnectionsLimit = _configuration.LimitConnections,
|
||||
Rooms = _server.Lobby.Rooms.Count,
|
||||
RoomsLimit = _configuration.LimitRooms,
|
||||
};
|
||||
|
||||
var room = new Room()
|
||||
{
|
||||
Id = $"Room ID {i}",
|
||||
};
|
||||
|
||||
for (var j = 0; j < 10; j++)
|
||||
{
|
||||
room.Players.Add(new Player()
|
||||
{
|
||||
Id = $"Player ID {i}",
|
||||
});
|
||||
}
|
||||
|
||||
message.Room = room;
|
||||
|
||||
_client.Send(message.ToByteArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,13 +158,11 @@ public class WebSocketServer : INetworkServer
|
||||
_sequencer.Push(0);
|
||||
|
||||
_connections = new WebSocketConnection[configuration.LimitConnections];
|
||||
|
||||
|
||||
_httpListener = new HttpListener();
|
||||
_httpListener.Prefixes.Add($"http://{configuration.Address}:{configuration.Port}/");
|
||||
_httpListener.Start();
|
||||
|
||||
// _executor.Run(() => StartAccept(_cancellationTokenSource.Token));
|
||||
|
||||
var protocolDecoded = RagonVersion.Parse(configuration.Protocol);
|
||||
_logger.Info($"Listen at http://{configuration.Address}:{configuration.Port}/");
|
||||
_logger.Info($"Protocol: {protocolDecoded}");
|
||||
|
||||
Reference in New Issue
Block a user