Moved config loading to parent class of Serverconfig and Accessconfig

This commit is contained in:
Robin Kanters 2015-05-16 13:00:28 +02:00
parent 7d16f0d835
commit c62b9cd079
8 changed files with 48 additions and 37 deletions

View File

@ -0,0 +1,30 @@
using System.IO;
using YamlDotNet.Serialization;
namespace TrueCraft.API
{
public abstract class Configuration
{
public static T LoadConfiguration<T>(string configFileName) where T : new()
{
T config;
if (File.Exists(configFileName))
{
var deserializer = new Deserializer(ignoreUnmatched: true);
using (var file = File.OpenText(configFileName))
config = deserializer.Deserialize<T>(file);
}
else
{
config = new T();
}
var serializer = new Serializer();
using (var writer = new StreamWriter(configFileName))
serializer.Serialize(writer, config);
return config;
}
}
}

View File

@ -30,8 +30,12 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="YamlDotNet">
<HintPath>..\packages\YamlDotNet.3.5.1\lib\net35\YamlDotNet.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Configuration.cs" />
<Compile Include="Coordinates3D.cs" />
<Compile Include="IAccessConfiguration.cs" />
<Compile Include="PlantSpecies.cs" />

View File

@ -4,7 +4,7 @@ using YamlDotNet.Serialization;
namespace TrueCraft
{
public class AccessConfiguration : IAccessConfiguration
public class AccessConfiguration : Configuration, IAccessConfiguration
{
public AccessConfiguration()
{

View File

@ -58,8 +58,8 @@ namespace TrueCraft.Handlers
server.Scheduler.ScheduleEvent(DateTime.Now.AddSeconds(10), remoteClient.SendKeepAlive);
server.Scheduler.ScheduleEvent(DateTime.Now.AddSeconds(1), remoteClient.ExpandChunkRadius);
if (!string.IsNullOrEmpty(Program.Configuration.MOTD))
remoteClient.SendMessage(Program.Configuration.MOTD);
if (!string.IsNullOrEmpty(Program.ServerConfiguration.MOTD))
remoteClient.SendMessage(Program.ServerConfiguration.MOTD);
server.SendMessage(ChatColor.Yellow + "{0} joined the server.", remoteClient.Username);
}
}

View File

@ -90,6 +90,8 @@ namespace TrueCraft
PendingBlockUpdates = new Queue<BlockUpdate>();
EnableClientLogging = false;
AccessConfiguration = Configuration.LoadConfiguration<AccessConfiguration>("access.yaml");
reader.RegisterCorePackets();
Handlers.PacketHandlers.RegisterHandlers(this);
}

View File

@ -16,7 +16,7 @@ namespace TrueCraft
{
public class Program
{
public static Configuration Configuration;
public static ServerConfiguration ServerConfiguration;
public static CommandManager CommandManager;
@ -31,15 +31,14 @@ namespace TrueCraft
Server.AddLogProvider(new FileLogProvider(new StreamWriter("packets.log", false), LogCategory.Packets));
#endif
Configuration = LoadConfiguration<Configuration>("config.yaml");
Server.AccessConfiguration = LoadConfiguration<AccessConfiguration>("access.yaml");
ServerConfiguration = Configuration.LoadConfiguration<ServerConfiguration>("config.yaml");
if (Configuration.Debug.DeleteWorldOnStartup)
if (ServerConfiguration.Debug.DeleteWorldOnStartup)
{
if (Directory.Exists("world"))
Directory.Delete("world", true);
}
if (Configuration.Debug.DeletePlayersOnStartup)
if (ServerConfiguration.Debug.DeletePlayersOnStartup)
{
if (Directory.Exists("players"))
Directory.Delete("players", true);
@ -92,11 +91,11 @@ namespace TrueCraft
}
CommandManager = new CommandManager();
Server.ChatMessageReceived += HandleChatMessageReceived;
Server.Start(new IPEndPoint(IPAddress.Parse(Configuration.ServerAddress), Configuration.ServerPort));
Server.Start(new IPEndPoint(IPAddress.Parse(ServerConfiguration.ServerAddress), ServerConfiguration.ServerPort));
Console.CancelKeyPress += HandleCancelKeyPress;
while (true)
{
Thread.Sleep(1000 * Configuration.WorldSaveInterval);
Thread.Sleep(1000 * ServerConfiguration.WorldSaveInterval);
foreach (var w in Server.Worlds)
{
w.Save();
@ -104,30 +103,6 @@ namespace TrueCraft
}
}
private static T LoadConfiguration<T>(string configFileName) where T : new()
{
T config;
if (File.Exists(configFileName))
{
Server.Log(LogCategory.Warning, configFileName + @" already exists, reading it right now...");
var deserializer = new Deserializer(ignoreUnmatched: true);
using (var file = File.OpenText(configFileName))
config = deserializer.Deserialize<T>(file);
}
else
{
Server.Log(LogCategory.Warning, configFileName + @" didn't exist yet, creating new one");
config = new T();
}
var serializer = new Serializer();
using (var writer = new StreamWriter(configFileName))
serializer.Serialize(writer, config);
return config;
}
static void HandleCancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
Server.Stop();

View File

@ -3,7 +3,7 @@ using YamlDotNet.Serialization;
namespace TrueCraft
{
public class Configuration
public class ServerConfiguration : Configuration
{
public class DebugConfiguration
{
@ -20,7 +20,7 @@ namespace TrueCraft
public bool DeletePlayersOnStartup { get; set; }
}
public Configuration()
public ServerConfiguration()
{
MOTD = ChatColor.Red + "Welcome to TrueCraft!";
Debug = new DebugConfiguration();

View File

@ -63,7 +63,7 @@
<Compile Include="Exceptions\PlayerDisconnectException.cs" />
<Compile Include="ItemRepository.cs" />
<Compile Include="CraftingRepository.cs" />
<Compile Include="Configuration.cs" />
<Compile Include="ServerConfiguration.cs" />
<Compile Include="PhysicsEngine.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />