Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
using GFramework.Core.Abstractions.events;
using GFramework.Core.Abstractions.utility;

namespace GFramework.Core.Abstractions.configuration;

/// <summary>
/// 配置管理器接口,提供类型安全的配置存储和访问
/// 线程安全:所有方法都是线程安全的
/// </summary>
public interface IConfigurationManager : IUtility
{
/// <summary>
/// 获取配置数量
/// </summary>
int Count { get; }

/// <summary>
/// 获取指定键的配置值
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <returns>配置值,如果不存在则返回类型默认值</returns>
T? GetConfig<T>(string key);

/// <summary>
/// 获取指定键的配置值,如果不存在则返回默认值
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <param name="defaultValue">默认值</param>
/// <returns>配置值或默认值</returns>
T GetConfig<T>(string key, T defaultValue);

/// <summary>
/// 设置指定键的配置值
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <param name="value">配置值</param>
void SetConfig<T>(string key, T value);

/// <summary>
/// 检查指定键的配置是否存在
/// </summary>
/// <param name="key">配置键</param>
/// <returns>如果存在返回 true,否则返回 false</returns>
bool HasConfig(string key);

/// <summary>
/// 移除指定键的配置
/// </summary>
/// <param name="key">配置键</param>
/// <returns>如果成功移除返回 true,否则返回 false</returns>
bool RemoveConfig(string key);

/// <summary>
/// 清空所有配置
/// </summary>
void Clear();

/// <summary>
/// 监听指定键的配置变化
/// </summary>
/// <typeparam name="T">配置值类型</typeparam>
/// <param name="key">配置键</param>
/// <param name="onChange">配置变化时的回调,参数为新值</param>
/// <returns>取消注册接口</returns>
IUnRegister WatchConfig<T>(string key, Action<T> onChange);

/// <summary>
/// 从 JSON 字符串加载配置
/// </summary>
/// <param name="json">JSON 字符串</param>
void LoadFromJson(string json);

/// <summary>
/// 将配置保存为 JSON 字符串
/// </summary>
/// <returns>JSON 字符串</returns>
string SaveToJson();

/// <summary>
/// 从文件加载配置
/// </summary>
/// <param name="path">文件路径</param>
void LoadFromFile(string path);

/// <summary>
/// 将配置保存到文件
/// </summary>
/// <param name="path">文件路径</param>
void SaveToFile(string path);

/// <summary>
/// 获取所有配置键
/// </summary>
/// <returns>配置键集合</returns>
IEnumerable<string> GetAllKeys();
}
38 changes: 38 additions & 0 deletions GFramework.Core.Abstractions/resource/IResourceHandle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
namespace GFramework.Core.Abstractions.resource;

/// <summary>
/// 资源句柄接口,用于管理资源的生命周期和引用
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
public interface IResourceHandle<out T> : IDisposable where T : class
{
/// <summary>
/// 获取资源实例
/// </summary>
T? Resource { get; }

/// <summary>
/// 获取资源路径
/// </summary>
string Path { get; }

/// <summary>
/// 获取资源是否有效(未被释放)
/// </summary>
bool IsValid { get; }

/// <summary>
/// 获取当前引用计数
/// </summary>
int ReferenceCount { get; }

/// <summary>
/// 增加引用计数
/// </summary>
void AddReference();

/// <summary>
/// 减少引用计数
/// </summary>
void RemoveReference();
}
35 changes: 35 additions & 0 deletions GFramework.Core.Abstractions/resource/IResourceLoader.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
namespace GFramework.Core.Abstractions.resource;

/// <summary>
/// 资源加载器接口,用于加载特定类型的资源
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
public interface IResourceLoader<T> where T : class
{
/// <summary>
/// 同步加载资源
/// </summary>
/// <param name="path">资源路径</param>
/// <returns>加载的资源实例</returns>
T Load(string path);

/// <summary>
/// 异步加载资源
/// </summary>
/// <param name="path">资源路径</param>
/// <returns>加载的资源实例</returns>
Task<T> LoadAsync(string path);

/// <summary>
/// 卸载资源
/// </summary>
/// <param name="resource">要卸载的资源</param>
void Unload(T resource);

/// <summary>
/// 检查是否支持加载指定路径的资源
/// </summary>
/// <param name="path">资源路径</param>
/// <returns>如果支持返回 true,否则返回 false</returns>
bool CanLoad(string path);
}
89 changes: 89 additions & 0 deletions GFramework.Core.Abstractions/resource/IResourceManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using GFramework.Core.Abstractions.utility;

namespace GFramework.Core.Abstractions.resource;

/// <summary>
/// 资源管理器接口,提供资源加载、缓存和卸载功能
/// 线程安全:所有方法都是线程安全的
/// </summary>
public interface IResourceManager : IUtility
{
/// <summary>
/// 获取已加载资源的数量
/// </summary>
int LoadedResourceCount { get; }

/// <summary>
/// 同步加载资源
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="path">资源路径</param>
/// <returns>资源实例,如果加载失败返回 null</returns>
T? Load<T>(string path) where T : class;

/// <summary>
/// 异步加载资源
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="path">资源路径</param>
/// <returns>资源实例,如果加载失败返回 null</returns>
Task<T?> LoadAsync<T>(string path) where T : class;

/// <summary>
/// 获取资源句柄(增加引用计数)
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="path">资源路径</param>
/// <returns>资源句柄</returns>
IResourceHandle<T>? GetHandle<T>(string path) where T : class;

/// <summary>
/// 卸载指定路径的资源
/// </summary>
/// <param name="path">资源路径</param>
/// <returns>如果成功卸载返回 true,否则返回 false</returns>
bool Unload(string path);

/// <summary>
/// 卸载所有资源
/// </summary>
void UnloadAll();

/// <summary>
/// 检查资源是否已加载
/// </summary>
/// <param name="path">资源路径</param>
/// <returns>如果已加载返回 true,否则返回 false</returns>
bool IsLoaded(string path);

/// <summary>
/// 注册资源加载器
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="loader">资源加载器</param>
void RegisterLoader<T>(IResourceLoader<T> loader) where T : class;

/// <summary>
/// 取消注册资源加载器
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
void UnregisterLoader<T>() where T : class;

/// <summary>
/// 预加载资源(加载但不返回)
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="path">资源路径</param>
Task PreloadAsync<T>(string path) where T : class;

/// <summary>
/// 获取所有已加载资源的路径
/// </summary>
IEnumerable<string> GetLoadedResourcePaths();

/// <summary>
/// 设置资源释放策略
/// </summary>
/// <param name="strategy">资源释放策略</param>
void SetReleaseStrategy(IResourceReleaseStrategy strategy);
}
16 changes: 16 additions & 0 deletions GFramework.Core.Abstractions/resource/IResourceReleaseStrategy.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace GFramework.Core.Abstractions.resource;

/// <summary>
/// 资源释放策略接口
/// 定义当资源引用计数变化时的处理行为
/// </summary>
public interface IResourceReleaseStrategy
{
/// <summary>
/// 判断是否应该释放资源
/// </summary>
/// <param name="path">资源路径</param>
/// <param name="refCount">当前引用计数</param>
/// <returns>如果应该释放返回 true,否则返回 false</returns>
bool ShouldRelease(string path, int refCount);
}
Loading
Loading