Beispiel #1
0
        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;
        }
Beispiel #2
0
        /// <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;
        }