Files
Fishing2Server/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/ExporterSettingsHelper.cs
2025-06-30 10:51:37 +08:00

63 lines
2.8 KiB
C#

using Fantasy.Exporter;
using Fantasy.Helper;
using Microsoft.Extensions.Configuration;
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
#pragma warning disable CS8601 // Possible null reference assignment.
#pragma warning disable CS8604 // Possible null reference argument.
namespace Fantasy.Tools.ProtocalExporter;
public class ExporterSettingsHelper
{
public static string? NetworkProtocolDirectory { get; private set; }
public static string NetworkProtocolServerDirectory { get; private set; }
public static string NetworkProtocolClientDirectory { get; private set; }
public static Dictionary<string, CustomSerialize> CustomSerializes { get; private set; }
public static void Initialize()
{
const string settingsName = "ExporterSettings.json";
var currentDirectory = ExporterAges.Instance.Folder;
if (string.IsNullOrEmpty(currentDirectory))
{
currentDirectory = Directory.GetCurrentDirectory();
}
if (!File.Exists(Path.Combine(currentDirectory, settingsName)))
{
throw new FileNotFoundException($"not found {settingsName} in OutputDirectory");
}
var root = new ConfigurationBuilder().SetBasePath(currentDirectory).AddJsonFile(settingsName).Build();
NetworkProtocolDirectory = FileHelper.GetFullPath(root["Export:NetworkProtocolDirectory:Value"], currentDirectory);
NetworkProtocolServerDirectory = FileHelper.GetFullPath(root["Export:NetworkProtocolServerDirectory:Value"], currentDirectory);
NetworkProtocolClientDirectory = FileHelper.GetFullPath(root["Export:NetworkProtocolClientDirectory:Value"], currentDirectory);
CustomSerializes = [];
var sort = new SortedList<long, CustomSerialize>();
var arrayOfValuesSection = root.GetSection("Export:Serializes:Value");
foreach (var item in arrayOfValuesSection.GetChildren())
{
var serializeItem = new CustomSerialize
{
KeyIndex = Convert.ToInt32(item.GetSection("KeyIndex").Value),
NameSpace = item.GetSection("NameSpace").Value,
SerializeName = item.GetSection("SerializeName").Value,
Attribute = item.GetSection("Attribute").Value,
Ignore = item.GetSection("Ignore").Value,
Member = item.GetSection("Member").Value
};
sort.Add(HashCodeHelper.ComputeHash64(serializeItem.SerializeName), serializeItem);
}
for (var i = 0; i < sort.Count; i++)
{
var customSerialize = sort.GetValueAtIndex(i);
customSerialize.OpCodeType = (uint)(i + 2);
CustomSerializes.Add(customSerialize.SerializeName, customSerialize);
}
}
}