using XFEExtension.NetCore.AutoImplement; namespace XFEExtension.NetCore.MemoryEditor.Manager; /// /// 静态内存 /// /// 地址自定义标识名称 /// 内存地址 /// 内存地址数据类型 /// 内存修改器 [CreateImpl] public abstract class StaticMemoryItem(string name, nint memoryAddress, Type memoryItemType, MemoryEditor memoryEditor) : MemoryItem(name, memoryItemType, memoryEditor) { /// /// 监听器 /// public StaticMemoryListener? Listener { get; protected set; } /// /// 内存地址 /// public nint MemoryAddress { get; init; } = memoryAddress; /// public override bool HasListener { get => Listener is not null; } /// public override void AddListener(TimeSpan? frequency = null, bool startListen = false) => Listener = memoryEditor.AddStaticListener(Name, MemoryAddress, frequency, MemoryItemType, startListen); /// public override bool Read(out T result) => memoryEditor.ReadMemory(MemoryAddress, out result); /// public override void RemoveListener() { memoryEditor.RemoveListener(Name); Listener = null; } /// public override async Task StopListen() { if (Listener is null) throw new InvalidOperationException($"{nameof(Listener)} 监听器为空"); IsListening = false; await Listener.StopListen(); } /// public override bool Write(T value) => memoryEditor.WriteMemory(MemoryAddress, value); internal override async Task StartListen(nint processHandler, TimeSpan? frequency = null) { if (Listener is null) throw new InvalidOperationException($"{nameof(Listener)} 监听器为空"); IsListening = true; memoryEditor.ListenerManager.IsListening = true; await Listener.StartListen(processHandler, frequency); } }