private void Load() { document = new XmlDocument(); m_DataDirectories = new ArrayList(); if (Exists) { XmlTextReader reader = new XmlTextReader(filename); try { document.Load(reader); } finally { reader.Close(); } } else { document.AppendChild(document.CreateElement("sunuo-config")); } // section "global" XmlElement global = GetConfiguration("global"); if (global != null) { foreach (XmlNode node in global.ChildNodes) { if (node.NodeType != XmlNodeType.Element) continue; XmlElement el = (XmlElement)node; switch (node.Name) { case "server-name": serverName = el.InnerText; break; case "multi-threading": m_Features[node.Name] = Parser.ParseBool(el.GetAttribute("value"), true); break; case "feature": m_Features[el.GetAttribute("name")] = Parser.ParseBool(el.GetAttribute("value"), true); break; default: log.WarnFormat("Invalid element global/{0}", node.Name); break; } } } // section "locations" XmlElement locations = GetConfiguration("locations"); foreach (XmlNode node in locations.ChildNodes) { XmlElement el = node as XmlElement; if (el != null) { string path = el.InnerText; switch (el.Name) { case "config-dir": m_ConfigDirectory = path; break; case "save-dir": m_SaveDirectory = path; break; case "backup-dir": m_BackupDirectory = path; break; case "data-path": if (Directory.Exists(path)) m_DataDirectories.Add(path); break; case "log-dir": m_LogDirectory = path; break; case "cache-dir": m_CacheDirectory = path; break; default: log.WarnFormat("Ignoring unknown location tag in {0}: {1}", filename, el.Name); break; } } } // section "libraries" XmlElement librariesEl = GetConfiguration("libraries"); foreach (XmlElement el in librariesEl.GetElementsByTagName("library")) { string name = el.GetAttribute("name"); if (name == null || name == "") { log.Warn("library element without name attribute"); continue; } name = name.ToLower(); Library libConfig = (Library)libraryConfig[name]; if (libConfig == null) libraryConfig[name] = libConfig = new Library(name); libConfig.Load(el); } if (!libraryConfig.ContainsKey("legacy")) libraryConfig["legacy"] = new Library("legacy"); // section "network" XmlElement networkEl = GetConfiguration("network"); m_Network = networkEl == null ? new Network() : new Network(networkEl); // section "login" XmlElement loginEl = GetConfiguration("login"); loginConfig = loginEl == null ? new Login() : new Login(loginEl); // section "server-list" XmlElement serverListEl = GetConfiguration("server-list"); if (serverListEl != null) gameServers = new GameServerList(serverListEl); }
private void Load() { document = new XmlDocument(); m_DataDirectories = new ArrayList(); if (Exists) { XmlTextReader reader = new XmlTextReader(filename); try { document.Load(reader); } finally { reader.Close(); } } else { document.AppendChild(document.CreateElement("sunuo-config")); } // section "global" XmlElement global = GetConfiguration("global"); if (global != null) { foreach (XmlNode node in global.ChildNodes) { if (node.NodeType != XmlNodeType.Element) { continue; } XmlElement el = (XmlElement)node; switch (node.Name) { case "server-name": serverName = el.InnerText; break; case "multi-threading": m_Features[node.Name] = Parser.ParseBool(el.GetAttribute("value")); break; case "feature": m_Features[el.GetAttribute("name")] = Parser.ParseBool(el.GetAttribute("value")); break; default: log.Warn(String.Format("Invalid element global/{0}", node.Name)); break; } } } // section "locations" XmlElement locations = GetConfiguration("locations"); foreach (XmlNode node in locations.ChildNodes) { XmlElement el = node as XmlElement; if (el != null) { string path = el.InnerText; switch (el.Name) { case "config-dir": m_ConfigDirectory = path; break; case "save-dir": m_SaveDirectory = path; break; case "backup-dir": m_BackupDirectory = path; break; case "data-path": if (Directory.Exists(path)) { m_DataDirectories.Add(path); } break; default: log.Warn(String.Format("Ignoring unknown location tag in {0}: {1}", filename, el.Name)); break; } } } // section "libraries" XmlElement librariesEl = GetConfiguration("libraries"); foreach (XmlElement el in librariesEl.GetElementsByTagName("library")) { string name = el.GetAttribute("name"); if (name == null || name == "") { log.Warn("library element without name attribute"); continue; } name = name.ToLower(); Library libConfig = (Library)libraryConfig[name]; if (libConfig == null) { libraryConfig[name] = libConfig = new Library(name); } libConfig.Load(el); } if (!libraryConfig.ContainsKey("legacy")) { libraryConfig["legacy"] = new Library("legacy"); } // section "login" XmlElement loginEl = GetConfiguration("login"); loginConfig = loginEl == null ? new Login() : new Login(loginEl); // section "server-list" XmlElement serverListEl = GetConfiguration("server-list"); if (serverListEl != null) { gameServers = new GameServerList(serverListEl); } }