From 7c504bb80ad593f400a92db64e3ec2af46ac8179 Mon Sep 17 00:00:00 2001 From: Spirtix Date: Sat, 17 Feb 2024 21:45:01 +0100 Subject: [PATCH] support for server configuration --- src/CommandHandlers/ChatMessageHandler.cs | 19 ++++++++++++++ src/Core/Configuration.cs | 31 +++++++++++++++++++++++ src/Core/WorldEvent.cs | 2 +- src/Program.cs | 4 ++- src/sodoffmmo.csproj | 2 ++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/Core/Configuration.cs diff --git a/src/CommandHandlers/ChatMessageHandler.cs b/src/CommandHandlers/ChatMessageHandler.cs index 15c721e..4c03b53 100644 --- a/src/CommandHandlers/ChatMessageHandler.cs +++ b/src/CommandHandlers/ChatMessageHandler.cs @@ -7,6 +7,25 @@ namespace sodoffmmo.CommandHandlers; [ExtensionCommandHandler("SCM")] class ChatMessageHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { + if (!Configuration.ServerConfiguration.EnableChat) { + ChatDisabled(client, receivedObject); + return; + } + Chat(client, receivedObject); + } + + public void ChatDisabled(Client client, NetworkObject receivedObject) { + NetworkObject cmd = new(); + NetworkObject data = new(); + data.Add("arr", new string[] { "CMR", "-1", "-1", "1", "Unfortunately, chat has been disabled by server administrators", "", "1", "Server" }); + cmd.Add("c", "CMR"); + cmd.Add("p", data); + + NetworkPacket packet = NetworkObject.WrapObject(1, 13, cmd).Serialize(); + client.Send(packet); + } + + public void Chat(Client client, NetworkObject receivedObject) { string message = receivedObject.Get("p").Get("chm"); NetworkObject cmd = new(); diff --git a/src/Core/Configuration.cs b/src/Core/Configuration.cs new file mode 100644 index 0000000..8a94ad2 --- /dev/null +++ b/src/Core/Configuration.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; + +namespace sodoffmmo.Core; +internal static class Configuration { + + public static ServerConfiguration ServerConfiguration { get; private set; } = new ServerConfiguration(); + + public static void Initialize() { + IConfigurationRoot config = new ConfigurationBuilder() + .AddJsonFile("appsettings.json", true) + .Build(); + + ServerConfiguration? serverConfiguration = config.GetSection("ServerConfiguration").Get(); + if (serverConfiguration is null) + return; + + ServerConfiguration = serverConfiguration; + } +} + +internal sealed class ServerConfiguration { + public bool EnableChat { get; set; } = true; + public int Port { get; set; } = 9933; + public int EventTimer { get; set; } = 30; + +} diff --git a/src/Core/WorldEvent.cs b/src/Core/WorldEvent.cs index 950b57b..bf91a65 100644 --- a/src/Core/WorldEvent.cs +++ b/src/Core/WorldEvent.cs @@ -195,7 +195,7 @@ class WorldEvent { // schedule next event, set timer to call PreInit() and send new WEN_ info private void PostEndEvent2(Object source, ElapsedEventArgs e) { - ScheduleEvent(30); // WE_ != WEN_ + ScheduleEvent(Configuration.ServerConfiguration.EventTimer); // WE_ != WEN_ AnnounceEvent(false, true); // send only WEN_ (WE_ should stay unchanged ... as WE_..._End) } diff --git a/src/Program.cs b/src/Program.cs index a4e661a..c6b01e3 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -1,5 +1,7 @@ using sodoffmmo; +using sodoffmmo.Core; using System.Net; -Server server = new(IPAddress.Any, 9933); +Configuration.Initialize(); +Server server = new(IPAddress.Any, Configuration.ServerConfiguration.Port); await server.Run(); diff --git a/src/sodoffmmo.csproj b/src/sodoffmmo.csproj index 11192e7..ea66c35 100644 --- a/src/sodoffmmo.csproj +++ b/src/sodoffmmo.csproj @@ -11,6 +11,8 @@ + +