diff --git a/TrueCraft.API/IAccessConfiguration.cs b/TrueCraft.API/IAccessConfiguration.cs new file mode 100644 index 0000000..5190fcd --- /dev/null +++ b/TrueCraft.API/IAccessConfiguration.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using TrueCraft.API.Networking; + +namespace TrueCraft.API +{ + public interface IAccessConfiguration + { + IList Blacklist { get; } + IList Whitelist { get; } + IList Oplist { get; } + } +} diff --git a/TrueCraft.API/TrueCraft.API.csproj b/TrueCraft.API/TrueCraft.API.csproj index 4de714e..c828ed4 100644 --- a/TrueCraft.API/TrueCraft.API.csproj +++ b/TrueCraft.API/TrueCraft.API.csproj @@ -33,6 +33,7 @@ + diff --git a/TrueCraft/AccessConfiguration.cs b/TrueCraft/AccessConfiguration.cs new file mode 100644 index 0000000..ca0ef97 --- /dev/null +++ b/TrueCraft/AccessConfiguration.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.IO; +using TrueCraft.API; +using TrueCraft.API.Networking; +using TrueCraft.API.Server; +using YamlDotNet.Serialization; + +namespace TrueCraft +{ + public class AccessConfiguration : IAccessConfiguration + { + private IList _blacklist, _whitelist, _oplist; + + public AccessConfiguration() + { + _blacklist = new List(); + _whitelist = new List(); + _oplist = new List(); + } + + [YamlMember(Alias = "blacklist")] + public IList Blacklist + { + get { return _blacklist; } + } + + [YamlMember(Alias = "whitelist")] + public IList Whitelist + { + get { return _whitelist; } + } + + [YamlMember(Alias = "ops")] + public IList Oplist + { + get { return _oplist; } + } + } +} diff --git a/TrueCraft/BlackWhiteList.cs b/TrueCraft/BlackWhiteList.cs deleted file mode 100644 index bdafa7c..0000000 --- a/TrueCraft/BlackWhiteList.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using TrueCraft.Api; -using TrueCraft.API.Logging; -using TrueCraft.API.Server; - -namespace TrueCraft -{ - public class PlayerBlackList : PlayerList - { - public PlayerBlackList(IMultiplayerServer server) - : base(server) - { - ConfigFileName = @"blacklist.txt"; - } - } - - public class PlayerWhiteList : PlayerList - { - public PlayerWhiteList(IMultiplayerServer server) - : base(server) - { - ConfigFileName = @"whitelist.txt"; - } - } - - public abstract class PlayerList : IPlayerList - { - private IList _players; - - protected PlayerList(IMultiplayerServer server) - { - Server = server; - } - - public string ConfigFileName { get; set; } - public IMultiplayerServer Server { get; set; } - public IList Players - { - get { return _players ?? (_players = LoadPlayersFromFile(ConfigFileName)); } - } - - private IList LoadPlayersFromFile(string configFileName) - { - try - { - if (!File.Exists(configFileName)) - File.Create(configFileName).Close(); - - using (var sr = new StreamReader(configFileName)) - { - return sr.ReadToEnd().Replace("\r", "").Split('\n').ToList(); - } - } - catch (Exception e) - { - Server.Log(LogCategory.Error, "The player list file could not be read: " + e.Message); - return null; - } - } - - public override string ToString() - { - return string.Format("Players: {0}", _players); - } - } -} diff --git a/TrueCraft/Program.cs b/TrueCraft/Program.cs index 6952f2f..9c341bb 100644 --- a/TrueCraft/Program.cs +++ b/TrueCraft/Program.cs @@ -17,6 +17,7 @@ namespace TrueCraft public class Program { public static Configuration Configuration; + public static AccessConfiguration AccessConfiguration; public static CommandManager CommandManager; @@ -24,17 +25,8 @@ namespace TrueCraft public static void Main(string[] args) { - if (File.Exists("config.yaml")) - { - var deserializer = new Deserializer(ignoreUnmatched: true); - using (var file = File.OpenText("config.yaml")) - Configuration = deserializer.Deserialize(file); - } - else - Configuration = new Configuration(); - var serializer = new Serializer(); - using (var writer = new StreamWriter("config.yaml")) - serializer.Serialize(writer, Configuration); + Configuration = LoadConfiguration("config.yaml"); + AccessConfiguration = LoadConfiguration("access.yaml"); Server = new MultiplayerServer(); Server.AddLogProvider(new ConsoleLogProvider(LogCategory.Notice | LogCategory.Warning | LogCategory.Error | LogCategory.Debug)); @@ -111,6 +103,25 @@ namespace TrueCraft } } + private static T LoadConfiguration(string configFileName) where T : new() + { + T config; + + if (File.Exists(configFileName)) + { + var deserializer = new Deserializer(ignoreUnmatched: true); + using (var file = File.OpenText("config.yaml")) + config = deserializer.Deserialize(file); + } + else + config = new T(); + var serializer = new Serializer(); + using (var writer = new StreamWriter("config.yaml")) + serializer.Serialize(writer, config); + + return config; + } + static void HandleCancelKeyPress(object sender, ConsoleCancelEventArgs e) { Server.Stop(); diff --git a/TrueCraft/TrueCraft.csproj b/TrueCraft/TrueCraft.csproj index 208f0c3..5250e5b 100644 --- a/TrueCraft/TrueCraft.csproj +++ b/TrueCraft/TrueCraft.csproj @@ -40,7 +40,7 @@ - +