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; }; } }