using XFEExtension.NetCore.AutoImplement; namespace XFEExtension.NetCore.MemoryEditor.Manager; /// /// 内存管理器构建器 /// [CreateImpl] public abstract class MemoryManagerBuilder() { internal string processName = string.Empty; internal bool autoReacquireProcess; internal int reacquireProcessFrequency; internal bool findProcessWhenCreate; /// /// 创建内存地址管理器构建器 /// /// public static MemoryManagerBuilder CreateBuilder() => new MemoryManagerBuilderImpl(); /// /// 使用自动重新获取进程 /// /// 进程名称 /// 重新获取进程的检测频率(单位毫秒) /// public MemoryManagerBuilder WithAutoReacquireProcess(string processName = "", int reacquireProcessFrequency = 500) { if (processName != string.Empty) this.processName = processName; autoReacquireProcess = true; this.reacquireProcessFrequency = reacquireProcessFrequency; return this; } /// /// 在创建后自动开始寻找目标进程 /// /// 进程名称 /// public MemoryManagerBuilder WithFindProcessWhenCreate(string processName = "") { if (processName != string.Empty) this.processName = processName; findProcessWhenCreate = true; return this; } /// /// 构建静态内存地址管理器 /// /// 内存构建器组 /// public StaticMemoryManager BuildStaticManager(params MemoryItemBuilder[] builders) { var manager = new StaticMemoryManagerImpl(builders) { AutoReacquireProcess = autoReacquireProcess, ReacquireProcessFrequency = reacquireProcessFrequency, ProcessName = processName }; if (findProcessWhenCreate) _ = manager.WaitProcessEnter(manager.ProcessName); return manager; } /// /// 构建动态内存地址管理器 /// /// 内存构建器组 /// public DynamicMemoryManager BuildDynamicManager(params MemoryItemBuilder[] builders) { var manager = new DynamicMemoryManagerImpl(builders) { AutoReacquireProcess = autoReacquireProcess, ReacquireProcessFrequency = reacquireProcessFrequency, ProcessName = processName }; if (findProcessWhenCreate) _ = manager.WaitProcessEnter(manager.ProcessName); return manager; } /// /// 构建可更新内存地址管理器 /// /// 内存构建器组 /// public UpdatableMemoryManager BuildUpdatableManager(params MemoryItemBuilder[] builders) { var manager = new UpdatableMemoryManager(builders) { AutoReacquireProcess = autoReacquireProcess, ReacquireProcessFrequency = reacquireProcessFrequency, ProcessName = processName }; if (findProcessWhenCreate) _ = manager.WaitProcessEnter(manager.ProcessName); return manager; } }