//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 loyalsoft. All rights reserved.
// Homepage: http://www.game7000.com/
// Feedback: http://www.game7000.com/
//------------------------------------------------------------
using GameFramework.Resource;
using System;
using System.Collections.Generic;
namespace GameFramework.Config
{
///
/// 全局配置管理器。
///
internal sealed partial class ConfigManager : GameFrameworkModule, IConfigManager
{
private readonly Dictionary m_ConfigDatas;
private readonly DataProvider m_DataProvider;
private IConfigHelper m_ConfigHelper;
///
/// 初始化全局配置管理器的新实例。
///
public ConfigManager()
{
m_ConfigDatas = new Dictionary(StringComparer.Ordinal);
m_DataProvider = new DataProvider(this);
m_ConfigHelper = null;
}
///
/// 获取全局配置项数量。
///
public int Count
{
get
{
return m_ConfigDatas.Count;
}
}
///
/// 获取缓冲二进制流的大小。
///
public int CachedBytesSize
{
get
{
return DataProvider.CachedBytesSize;
}
}
///
/// 读取全局配置成功事件。
///
public event EventHandler ReadDataSuccess
{
add
{
m_DataProvider.ReadDataSuccess += value;
}
remove
{
m_DataProvider.ReadDataSuccess -= value;
}
}
///
/// 读取全局配置失败事件。
///
public event EventHandler ReadDataFailure
{
add
{
m_DataProvider.ReadDataFailure += value;
}
remove
{
m_DataProvider.ReadDataFailure -= value;
}
}
///
/// 读取全局配置更新事件。
///
public event EventHandler ReadDataUpdate
{
add
{
m_DataProvider.ReadDataUpdate += value;
}
remove
{
m_DataProvider.ReadDataUpdate -= value;
}
}
///
/// 读取全局配置时加载依赖资源事件。
///
public event EventHandler ReadDataDependencyAsset
{
add
{
m_DataProvider.ReadDataDependencyAsset += value;
}
remove
{
m_DataProvider.ReadDataDependencyAsset -= value;
}
}
///
/// 全局配置管理器轮询。
///
/// 逻辑流逝时间,以秒为单位。
/// 真实流逝时间,以秒为单位。
internal override void Update(float elapseSeconds, float realElapseSeconds)
{
}
///
/// 关闭并清理全局配置管理器。
///
internal override void Shutdown()
{
}
///
/// 设置资源管理器。
///
/// 资源管理器。
public void SetResourceManager(IResourceManager resourceManager)
{
m_DataProvider.SetResourceManager(resourceManager);
}
///
/// 设置全局配置数据提供者辅助器。
///
/// 全局配置数据提供者辅助器。
public void SetDataProviderHelper(IDataProviderHelper dataProviderHelper)
{
m_DataProvider.SetDataProviderHelper(dataProviderHelper);
}
///
/// 设置全局配置辅助器。
///
/// 全局配置辅助器。
public void SetConfigHelper(IConfigHelper configHelper)
{
if (configHelper == null)
{
throw new GameFrameworkException("Config helper is invalid.");
}
m_ConfigHelper = configHelper;
}
///
/// 确保二进制流缓存分配足够大小的内存并缓存。
///
/// 要确保二进制流缓存分配内存的大小。
public void EnsureCachedBytesSize(int ensureSize)
{
DataProvider.EnsureCachedBytesSize(ensureSize);
}
///
/// 释放缓存的二进制流。
///
public void FreeCachedBytes()
{
DataProvider.FreeCachedBytes();
}
///
/// 读取全局配置。
///
/// 全局配置资源名称。
public void ReadData(string configAssetName)
{
m_DataProvider.ReadData(configAssetName);
}
///
/// 读取全局配置。
///
/// 全局配置资源名称。
/// 加载全局配置资源的优先级。
public void ReadData(string configAssetName, int priority)
{
m_DataProvider.ReadData(configAssetName, priority);
}
///
/// 读取全局配置。
///
/// 全局配置资源名称。
/// 用户自定义数据。
public void ReadData(string configAssetName, object userData)
{
m_DataProvider.ReadData(configAssetName, userData);
}
///
/// 读取全局配置。
///
/// 全局配置资源名称。
/// 加载全局配置资源的优先级。
/// 用户自定义数据。
public void ReadData(string configAssetName, int priority, object userData)
{
m_DataProvider.ReadData(configAssetName, priority, userData);
}
///
/// 解析全局配置。
///
/// 要解析的全局配置字符串。
/// 是否解析全局配置成功。
public bool ParseData(string configString)
{
return m_DataProvider.ParseData(configString);
}
///
/// 解析全局配置。
///
/// 要解析的全局配置字符串。
/// 用户自定义数据。
/// 是否解析全局配置成功。
public bool ParseData(string configString, object userData)
{
return m_DataProvider.ParseData(configString, userData);
}
///
/// 解析全局配置。
///
/// 要解析的全局配置二进制流。
/// 是否解析全局配置成功。
public bool ParseData(byte[] configBytes)
{
return m_DataProvider.ParseData(configBytes);
}
///
/// 解析全局配置。
///
/// 要解析的全局配置二进制流。
/// 用户自定义数据。
/// 是否解析全局配置成功。
public bool ParseData(byte[] configBytes, object userData)
{
return m_DataProvider.ParseData(configBytes, userData);
}
///
/// 解析全局配置。
///
/// 要解析的全局配置二进制流。
/// 全局配置二进制流的起始位置。
/// 全局配置二进制流的长度。
/// 是否解析全局配置成功。
public bool ParseData(byte[] configBytes, int startIndex, int length)
{
return m_DataProvider.ParseData(configBytes, startIndex, length);
}
///
/// 解析全局配置。
///
/// 要解析的全局配置二进制流。
/// 全局配置二进制流的起始位置。
/// 全局配置二进制流的长度。
/// 用户自定义数据。
/// 是否解析全局配置成功。
public bool ParseData(byte[] configBytes, int startIndex, int length, object userData)
{
return m_DataProvider.ParseData(configBytes, startIndex, length, userData);
}
///
/// 检查是否存在指定全局配置项。
///
/// 要检查全局配置项的名称。
/// 指定的全局配置项是否存在。
public bool HasConfig(string configName)
{
return GetConfigData(configName).HasValue;
}
///
/// 从指定全局配置项中读取布尔值。
///
/// 要获取全局配置项的名称。
/// 读取的布尔值。
public bool GetBool(string configName)
{
ConfigData? configData = GetConfigData(configName);
if (!configData.HasValue)
{
throw new GameFrameworkException(Utility.Text.Format("Config name '{0}' is not exist.", configName));
}
return configData.Value.BoolValue;
}
///
/// 从指定全局配置项中读取布尔值。
///
/// 要获取全局配置项的名称。
/// 当指定的全局配置项不存在时,返回此默认值。
/// 读取的布尔值。
public bool GetBool(string configName, bool defaultValue)
{
ConfigData? configData = GetConfigData(configName);
return configData.HasValue ? configData.Value.BoolValue : defaultValue;
}
///
/// 从指定全局配置项中读取整数值。
///
/// 要获取全局配置项的名称。
/// 读取的整数值。
public int GetInt(string configName)
{
ConfigData? configData = GetConfigData(configName);
if (!configData.HasValue)
{
throw new GameFrameworkException(Utility.Text.Format("Config name '{0}' is not exist.", configName));
}
return configData.Value.IntValue;
}
///
/// 从指定全局配置项中读取整数值。
///
/// 要获取全局配置项的名称。
/// 当指定的全局配置项不存在时,返回此默认值。
/// 读取的整数值。
public int GetInt(string configName, int defaultValue)
{
ConfigData? configData = GetConfigData(configName);
return configData.HasValue ? configData.Value.IntValue : defaultValue;
}
///
/// 从指定全局配置项中读取浮点数值。
///
/// 要获取全局配置项的名称。
/// 读取的浮点数值。
public float GetFloat(string configName)
{
ConfigData? configData = GetConfigData(configName);
if (!configData.HasValue)
{
throw new GameFrameworkException(Utility.Text.Format("Config name '{0}' is not exist.", configName));
}
return configData.Value.FloatValue;
}
///
/// 从指定全局配置项中读取浮点数值。
///
/// 要获取全局配置项的名称。
/// 当指定的全局配置项不存在时,返回此默认值。
/// 读取的浮点数值。
public float GetFloat(string configName, float defaultValue)
{
ConfigData? configData = GetConfigData(configName);
return configData.HasValue ? configData.Value.FloatValue : defaultValue;
}
///
/// 从指定全局配置项中读取字符串值。
///
/// 要获取全局配置项的名称。
/// 读取的字符串值。
public string GetString(string configName)
{
ConfigData? configData = GetConfigData(configName);
if (!configData.HasValue)
{
throw new GameFrameworkException(Utility.Text.Format("Config name '{0}' is not exist.", configName));
}
return configData.Value.StringValue;
}
///
/// 从指定全局配置项中读取字符串值。
///
/// 要获取全局配置项的名称。
/// 当指定的全局配置项不存在时,返回此默认值。
/// 读取的字符串值。
public string GetString(string configName, string defaultValue)
{
ConfigData? configData = GetConfigData(configName);
return configData.HasValue ? configData.Value.StringValue : defaultValue;
}
///
/// 增加指定全局配置项。
///
/// 要增加全局配置项的名称。
/// 全局配置项的值。
/// 是否增加全局配置项成功。
public bool AddConfig(string configName, string configValue)
{
bool boolValue = false;
bool.TryParse(configValue, out boolValue);
int intValue = 0;
int.TryParse(configValue, out intValue);
float floatValue = 0f;
float.TryParse(configValue, out floatValue);
return AddConfig(configName, boolValue, intValue, floatValue, configValue);
}
///
/// 增加指定全局配置项。
///
/// 要增加全局配置项的名称。
/// 全局配置项布尔值。
/// 全局配置项整数值。
/// 全局配置项浮点数值。
/// 全局配置项字符串值。
/// 是否增加全局配置项成功。
public bool AddConfig(string configName, bool boolValue, int intValue, float floatValue, string stringValue)
{
if (HasConfig(configName))
{
return false;
}
m_ConfigDatas.Add(configName, new ConfigData(boolValue, intValue, floatValue, stringValue));
return true;
}
///
/// 移除指定全局配置项。
///
/// 要移除全局配置项的名称。
public bool RemoveConfig(string configName)
{
if (!HasConfig(configName))
{
return false;
}
return m_ConfigDatas.Remove(configName);
}
///
/// 清空所有全局配置项。
///
public void RemoveAllConfigs()
{
m_ConfigDatas.Clear();
}
private ConfigData? GetConfigData(string configName)
{
if (string.IsNullOrEmpty(configName))
{
throw new GameFrameworkException("Config name is invalid.");
}
ConfigData configData = default(ConfigData);
if (m_ConfigDatas.TryGetValue(configName, out configData))
{
return configData;
}
return null;
}
}
}