internal static ProviderInfo ReadFromXml(XmlNode rootNode) { ProviderInfo result = new ProviderInfo(); // info XmlNode infoNode = rootNode.SelectSingleNode("info"); result.ASProxyVersion = infoNode.Attributes["ASProxyVersion"].Value; result.Name = infoNode.SelectSingleNode("Name").InnerText; result.Author = infoNode.SelectSingleNode("Author").InnerText; result.Version = infoNode.SelectSingleNode("Version").InnerText; result.Description = infoNode.SelectSingleNode("Description").InnerText; result.ConfigUiUrl = infoNode.SelectSingleNode("ConfigUiUrl").InnerText; // update XmlNode updateNode = rootNode.SelectSingleNode("update"); result.UpdateEnabled = Convert.ToBoolean(updateNode.Attributes["enabled"].Value); result.UpdateInfoUrl = updateNode.Attributes["updateInfoUrl"].Value; // registred providers list result.Providers = new Dictionary<ProviderType, string>(); XmlNode providersNode = rootNode.SelectSingleNode("providers"); Type ProviderTypeEnum = typeof(ProviderType); foreach (XmlNode provider in providersNode.ChildNodes) { if (provider.Name != "add") continue; // Parse privider name string providerName = provider.Attributes["providerName"].Value; ProviderType type = (ProviderType)Enum.Parse(ProviderTypeEnum, providerName); string typeName = provider.Attributes["typeName"].Value; // add to registred list result.Providers.Add(type, typeName); } result.Disabled = false; result.Loaded = false; return result; }
/// <summary> /// Applies the loaded provider and makes it ready to use /// </summary> /// <param name="hasConflict">If this provider has any conflicts</param> /// <returns>True ,if it was successfull to load the provider</returns> private static bool ApplyLoadedProvider(ProviderInfo info, out bool hasConflict) { hasConflict = false; bool loaded = false; foreach (KeyValuePair<ProviderType, string> providerType in info.Providers) { Type classType; try { // load the provider type classType = Type.GetType(providerType.Value); if (classType != null) { // at least one provider is loaded loaded = true; // if there is already key for this provider type if (_loadedProviders.ContainsKey(providerType.Key.ToString())) hasConflict = true; // Set to loaded results SetProviderType(providerType.Key, classType); } } catch (Exception ex) { if (Systems.LogSystem.ErrorLogEnabled) Systems.LogSystem.LogError(ex, "Failed to load provider: Name=" + info.Name + " ProviderType=" + providerType.Key.ToString() + " TypeName=" + providerType.Value, string.Empty); // continue to next provider } } return loaded; }