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