using System.IO; using System.Xml.Serialization; using UnityEngine; #if UNITY_EDITOR using UnityEditor.Compilation; using UnityEditor.Build.Reporting; using UnityEditor; using UnityEditor.Build; #endif namespace FishNet.Configuring { public class Configuration { /// <summary> /// /// </summary> private static ConfigurationData _configurations; /// <summary> /// ConfigurationData to use. /// </summary> public static ConfigurationData Configurations { get { if (_configurations == null) _configurations = LoadConfigurationData(); if (_configurations == null) throw new System.Exception("Fish-Networking Configurations could not be loaded. Certain features such as code-stripping may not function."); return _configurations; } private set { _configurations = value; } } /// <summary> /// File name for configuration disk data. /// </summary> public const string CONFIG_FILE_NAME = "FishNet.Config.XML"; /// <summary> /// Returns the path for the configuration file. /// </summary> /// <returns></returns> internal static string GetAssetsPath(string additional = "") { string a = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Assets"); if (additional != "") a = Path.Combine(a, additional); return a; } /// <summary> /// Returns FishNetworking ConfigurationData. /// </summary> /// <returns></returns> internal static ConfigurationData LoadConfigurationData() { //return new ConfigurationData(); if (_configurations == null || !_configurations.Loaded) { string configPath = GetAssetsPath(CONFIG_FILE_NAME); //string configPath = string.Empty; //File is on disk. if (File.Exists(configPath)) { FileStream fs = null; try { XmlSerializer serializer = new XmlSerializer(typeof(ConfigurationData)); fs = new FileStream(configPath, FileMode.Open, FileAccess.Read, FileShare.Read); _configurations = (ConfigurationData)serializer.Deserialize(fs); } finally { fs?.Close(); } _configurations.Loaded = true; } else { //If null then make a new instance. if (_configurations == null) _configurations = new ConfigurationData(); //Don't unset loaded, if its true then it should have proper info. //_configurationData.Loaded = false; } } return _configurations; } } }