diff --git a/GameServer/GameServer.csproj b/GameServer/GameServer.csproj index 8e642cb..382445a 100644 --- a/GameServer/GameServer.csproj +++ b/GameServer/GameServer.csproj @@ -16,4 +16,10 @@ + + + PreserveNewest + + + diff --git a/GameServer/Network/Kcp/KcpGateway.cs b/GameServer/Network/Kcp/KcpGateway.cs index 443c18a..10d8830 100644 --- a/GameServer/Network/Kcp/KcpGateway.cs +++ b/GameServer/Network/Kcp/KcpGateway.cs @@ -2,8 +2,10 @@ using System.Buffers.Binary; using System.Net; using System.Net.Sockets; +using GameServer.Settings; using KcpSharp; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; namespace GameServer.Network.Kcp; internal class KcpGateway @@ -15,21 +17,22 @@ internal class KcpGateway private const byte NetFlagAck = 0xEE; private readonly ILogger _logger; + private readonly IOptions _options; private readonly SessionManager _sessionManager; private IKcpTransport? _kcpTransport; private int _convCounter; - public KcpGateway(ILogger logger, SessionManager sessionManager) + public KcpGateway(ILogger logger, IOptions options, SessionManager sessionManager) { _logger = logger; + _options = options; _sessionManager = sessionManager; } public void Start() { - IPEndPoint endPoint = new(IPAddress.Any, 1337); - + IPEndPoint endPoint = _options.Value.EndPoint; _kcpTransport = KcpSocketTransport.CreateMultiplexConnection(new(endPoint), 1400); _kcpTransport.SetHandshakeHandler(KcpSynPacketSize, HandleKcpSynPacket); _kcpTransport.Start(); diff --git a/GameServer/Program.cs b/GameServer/Program.cs index bc99585..7c06a2f 100644 --- a/GameServer/Program.cs +++ b/GameServer/Program.cs @@ -6,8 +6,10 @@ using GameServer.Network; using GameServer.Network.Kcp; using GameServer.Network.Messages; using GameServer.Network.Rpc; +using GameServer.Settings; using GameServer.Systems.Entity; using GameServer.Systems.Event; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; @@ -21,6 +23,8 @@ internal static class Program HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); builder.Logging.AddConsole(); + builder.Services.Configure(builder.Configuration.GetRequiredSection("Gateway")); + builder.Services.AddControllers() .AddSingleton().AddScoped() .AddScoped().AddSingleton() diff --git a/GameServer/Settings/GatewaySettings.cs b/GameServer/Settings/GatewaySettings.cs new file mode 100644 index 0000000..842854f --- /dev/null +++ b/GameServer/Settings/GatewaySettings.cs @@ -0,0 +1,17 @@ +using System.Net; + +namespace GameServer.Settings; +internal class GatewaySettings +{ + public required string Host { get; set; } + + public IPEndPoint EndPoint + { + get + { + string[] split = Host.Split(':'); + + return new IPEndPoint(IPAddress.Parse(split[0]), int.Parse(split[1])); + } + } +} diff --git a/GameServer/appsettings.json b/GameServer/appsettings.json new file mode 100644 index 0000000..01b53ea --- /dev/null +++ b/GameServer/appsettings.json @@ -0,0 +1,5 @@ +{ + "Gateway": { + "Host": "0.0.0.0:1337" + } +} \ No newline at end of file