饭太稀

This commit is contained in:
bob
2025-06-30 10:51:37 +08:00
commit 8e45469c83
753 changed files with 87652 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
using Fantasy.Helper;
namespace Fantasy.Tools.ProtocalExporter;
internal class OpCodeCache
{
private readonly List<uint> _opCodes = new List<uint>();
private readonly Dictionary<string, uint> _opcodeCache;
private readonly Dictionary<string, uint> _saveOpCodeCache = new();
private readonly string _opcodeCachePath = $"{ExporterSettingsHelper.NetworkProtocolDirectory}OpCode.Cache";
/// <summary>
/// 构造函数,用于初始化网络协议操作码缓存
/// </summary>
public OpCodeCache(bool regenerate)
{
if (File.Exists(_opcodeCachePath) && !regenerate)
{
var readAllText = File.ReadAllText(_opcodeCachePath);
_opcodeCache = readAllText.Deserialize<Dictionary<string, uint>>();
_opCodes.AddRange(_opcodeCache.Values);
}
else
{
_opcodeCache = new Dictionary<string, uint>();
}
}
/// <summary>
/// 保存网络协议操作码
/// </summary>
public void Save()
{
File.WriteAllText(_opcodeCachePath, _saveOpCodeCache.ToJson());
}
/// <summary>
/// 根据className获得OpCode、如果是新增的会产生一个新的OpCode
/// </summary>
/// <param name="className">协议名</param>
/// <param name="opcode">操作码</param>
/// <returns></returns>
public uint GetOpcodeCache(string className, ref uint opcode)
{
if (!_opcodeCache.TryGetValue(className, out var opCode))
{
while (_opCodes.Contains(++opcode))
{
}
opCode = opcode;
_opCodes.Add(opCode);
}
_saveOpCodeCache.Add(className, opCode);
return opCode;
}
}