namespace XFEExtension.NetCore.MemoryEditor.Manager;
///
/// 内存条目
///
public abstract class MemoryItem
{
private protected MemoryEditor memoryEditor;
///
/// 内存地址数据类型
///
public Type MemoryItemType { get; set; }
///
/// 内存地址标识名
///
public string Name { get; init; }
///
/// 该地址是否被监听
///
public bool IsListening { get; protected set; }
///
/// 是否有监听器
///
public abstract bool HasListener { get; }
///
/// 开始监听该地址
///
/// 监听频率,单位为毫秒
public async Task StartListen(int frequency) => await StartListen(TimeSpan.FromMilliseconds(frequency));
///
/// 开始监听该地址
///
/// 监听频率
///
public async Task StartListen(TimeSpan? frequency = null)
{
if (IsListening)
throw new InvalidOperationException("正在监听中,无法重复监听");
IsListening = true;
await StartListen(memoryEditor.ProcessHandler, frequency);
}
internal abstract Task StartListen(nint processHandler, TimeSpan? frequency);
///
/// 为该地址添加监听器
///
/// 监听频率
/// 是否在添加后启用监听
public abstract void AddListener(TimeSpan? frequency = null, bool startListen = false);
///
/// 移除监听器
///
public abstract void RemoveListener();
///
/// 停止监听
///
public abstract Task StopListen();
///
/// 写入该内存
///
/// 数据类型
/// 写入值
/// 是否写入成功
public abstract bool Write(T value) where T : struct;
///
/// 读取该内存的值
///
/// 数据类型
/// 返回结果
public T Read() where T : struct
{
Read(out T result);
return result;
}
///
/// 读取该内存的值
///
/// 数据类型
/// 读取的值
/// 是否读取成功
public abstract bool Read(out T result) where T : struct;
///
/// 内存条目
///
/// 名称
/// 内存地址数据类型
/// 修改器
protected MemoryItem(string name, Type memoryItemType, MemoryEditor memoryEditor)
{
this.memoryEditor = memoryEditor;
MemoryItemType = memoryItemType;
Name = name;
memoryEditor.ListeningStateChanged += (sender, e) =>
{
IsListening = e;
};
}
}