mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2026-02-05 06:52:14 +01:00
Init enter game
This commit is contained in:
99
Common/Util/ConfigManager.cs
Normal file
99
Common/Util/ConfigManager.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
using KianaBH.Configuration;
|
||||
using KianaBH.Internationalization;
|
||||
using Newtonsoft.Json;
|
||||
using KianaBH.Util.Extensions;
|
||||
|
||||
namespace KianaBH.Util;
|
||||
|
||||
public static class ConfigManager
|
||||
{
|
||||
public static readonly Logger Logger = new("ConfigManager");
|
||||
public static ConfigContainer Config { get; private set; } = new();
|
||||
private static readonly string ConfigFilePath = Config.Path.ConfigPath + "/Config.json";
|
||||
public static HotfixContainer Hotfix { get; private set; } = new();
|
||||
private static readonly string HotfixFilePath = Config.Path.ConfigPath + "/Hotfix.json";
|
||||
|
||||
public static void LoadConfig()
|
||||
{
|
||||
LoadConfigData();
|
||||
LoadHotfixData();
|
||||
}
|
||||
|
||||
private static void LoadConfigData()
|
||||
{
|
||||
var file = new FileInfo(ConfigFilePath);
|
||||
if (!file.Exists)
|
||||
{
|
||||
Config = new()
|
||||
{
|
||||
ServerOption =
|
||||
{
|
||||
Language = Extensions.Extensions.GetCurrentLanguage()
|
||||
}
|
||||
};
|
||||
|
||||
Logger.Info("Current Language is " + Config.ServerOption.Language);
|
||||
SaveData(Config, ConfigFilePath);
|
||||
}
|
||||
|
||||
using (var stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||
using (var reader = new StreamReader(stream))
|
||||
{
|
||||
var json = reader.ReadToEnd();
|
||||
Config = JsonConvert.DeserializeObject<ConfigContainer>(json)!;
|
||||
}
|
||||
|
||||
SaveData(Config, ConfigFilePath);
|
||||
}
|
||||
|
||||
private static void LoadHotfixData()
|
||||
{
|
||||
var file = new FileInfo(HotfixFilePath);
|
||||
|
||||
// Generate all necessary versions
|
||||
var verList = Extensions.Extensions.GetSupportVersions();
|
||||
|
||||
Logger.Info(I18NManager.Translate("Server.ServerInfo.CurrentVersion",
|
||||
verList.Aggregate((current, next) => $"{current}, {next}")));
|
||||
|
||||
if (!file.Exists)
|
||||
{
|
||||
Hotfix = new HotfixContainer();
|
||||
SaveData(Hotfix, HotfixFilePath);
|
||||
file.Refresh();
|
||||
}
|
||||
|
||||
using (var stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||
using (var reader = new StreamReader(stream))
|
||||
{
|
||||
var json = reader.ReadToEnd();
|
||||
Hotfix = JsonConvert.DeserializeObject<HotfixContainer>(json)!;
|
||||
}
|
||||
|
||||
foreach (var version in verList)
|
||||
if (!Hotfix.Hotfixes.TryGetValue(version, out var _))
|
||||
Hotfix.Hotfixes[version] = new();
|
||||
|
||||
SaveData(Hotfix, HotfixFilePath);
|
||||
}
|
||||
|
||||
private static void SaveData(object data, string path)
|
||||
{
|
||||
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
|
||||
using var stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
|
||||
using var writer = new StreamWriter(stream);
|
||||
writer.Write(json);
|
||||
}
|
||||
|
||||
public static void InitDirectories()
|
||||
{
|
||||
foreach (var property in Config.Path.GetType().GetProperties())
|
||||
{
|
||||
var dir = property.GetValue(Config.Path)?.ToString();
|
||||
|
||||
if (!string.IsNullOrEmpty(dir))
|
||||
if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir))
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user