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