using System.IO;
using UnityEngine;
namespace LightGlue.Unity.Config
{
///
/// 网络配置管理器:负责加载和保存网络配置到JSON文件
/// 配置文件位置:Application.persistentDataPath/network_config.json
///
public static class NetworkConfigManager
{
private const string CONFIG_FILE_NAME = "network_config.json";
private static NetworkConfig _cachedConfig;
///
/// 获取配置文件完整路径
///
public static string GetConfigPath()
{
return Path.Combine(Application.persistentDataPath, CONFIG_FILE_NAME);
}
///
/// 加载网络配置(如果文件不存在则返回默认配置)
///
public static NetworkConfig LoadConfig()
{
// 如果已缓存,直接返回
if (_cachedConfig != null)
return _cachedConfig;
string configPath = GetConfigPath();
// 如果配置文件不存在,返回默认配置
if (!File.Exists(configPath))
{
Debug.Log($"[NetworkConfigManager] 配置文件不存在,使用默认配置: {configPath}");
_cachedConfig = NetworkConfig.CreateDefault();
return _cachedConfig;
}
try
{
string json = File.ReadAllText(configPath);
_cachedConfig = JsonUtility.FromJson(json);
if (_cachedConfig != null && !json.Contains("pythonNoDisplay"))
{
_cachedConfig.pythonNoDisplay = true;
}
if (_cachedConfig == null)
{
Debug.LogWarning($"[NetworkConfigManager] 配置文件解析失败,使用默认配置");
_cachedConfig = NetworkConfig.CreateDefault();
}
else
{
// 验证配置有效性
if (!_cachedConfig.Validate())
{
Debug.LogWarning($"[NetworkConfigManager] 配置验证失败,使用默认配置");
_cachedConfig = NetworkConfig.CreateDefault();
}
else
{
Debug.Log($"[NetworkConfigManager] 成功加载网络配置: {configPath}");
}
}
}
catch (System.Exception ex)
{
Debug.LogError($"[NetworkConfigManager] 加载配置失败: {ex.Message}");
_cachedConfig = NetworkConfig.CreateDefault();
}
return _cachedConfig;
}
///
/// 保存网络配置到文件
///
public static bool SaveConfig(NetworkConfig config)
{
if (config == null)
{
Debug.LogError("[NetworkConfigManager] 配置对象为空,无法保存");
return false;
}
// 验证配置
if (!config.Validate())
{
Debug.LogError("[NetworkConfigManager] 配置验证失败,无法保存");
return false;
}
try
{
string configPath = GetConfigPath();
string json = JsonUtility.ToJson(config, prettyPrint: true);
// 确保目录存在
string directory = Path.GetDirectoryName(configPath);
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
File.WriteAllText(configPath, json);
_cachedConfig = config; // 更新缓存
Debug.Log($"[NetworkConfigManager] 网络配置已保存: {configPath}");
return true;
}
catch (System.Exception ex)
{
Debug.LogError($"[NetworkConfigManager] 保存配置失败: {ex.Message}");
return false;
}
}
///
/// 清除缓存(重新加载配置时使用)
///
public static void ClearCache()
{
_cachedConfig = null;
}
///
/// 获取当前缓存的配置(不触发文件读取)
///
public static NetworkConfig GetCachedConfig()
{
if (_cachedConfig == null)
return LoadConfig();
return _cachedConfig;
}
}
}