supersocket/SocketEngin/BootstrapFactory.cs 详解

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SuperSocket.SocketBase;
using SuperSocket.SocketEngine.Configuration;
using SuperSocket.SocketBase.Config;
using System.Configuration;


namespace SuperSocket.SocketEngine
{
    /// <summary>
    /// Bootstrap Factory
    /// </summary>
    public static class BootstrapFactory
    {
        /// <summary>
        /// Creates the bootstrap.
        /// </summary>
        /// <param name="config">The config.</param>
        /// <returns></returns>
        public static IBootstrap CreateBootstrap(IConfigurationSource config)
        {
            if (config == null)
                throw new ArgumentNullException("config");


            if (config.Isolation == IsolationMode.AppDomain)
                return new AppDomainBootstrap(config);
            else if (config.Isolation == IsolationMode.Process)
                return new ProcessBootstrap(config);
            else
                return new DefaultBootstrap(config);
        }


        /// <summary>
        /// Creates the bootstrap from app configuration's socketServer section.
        /// </summary>
        /// <returns></returns>
        public static IBootstrap CreateBootstrap()
        {
            var configSection = ConfigurationManager.GetSection("superSocket");


            if (configSection == null)//to keep compatible with old version
                configSection = ConfigurationManager.GetSection("socketServer");


            if(configSection == null)
                throw new ConfigurationErrorsException("Missing 'superSocket' or 'socketServer' configuration section.");


            var configSource = configSection as IConfigurationSource;
            if(configSource == null)
                throw new ConfigurationErrorsException("Invalid 'superSocket' or 'socketServer' configuration section.");


            return CreateBootstrap(configSource);
        }


        /// <summary>
        /// Creates the bootstrap.
        /// </summary>
        /// <param name="configSectionName">Name of the config section.</param>
        /// <returns></returns>
        public static IBootstrap CreateBootstrap(string configSectionName)
        {
            var configSource = ConfigurationManager.GetSection(configSectionName) as IConfigurationSource;


            if (configSource == null)
                throw new ArgumentException("Invalid section name.");


            return CreateBootstrap(configSource);
        }


        /// <summary>
        /// Creates the bootstrap from configuration file.
        /// </summary>
        /// <param name="configFile">The configuration file.</param>
        /// <returns></returns>
        public static IBootstrap CreateBootstrapFromConfigFile(string configFile)
        {
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = configFile;


            var config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);


            var configSection = config.GetSection("superSocket");


            if (configSection == null)
                configSection = config.GetSection("socketServer");


            return CreateBootstrap(configSection as IConfigurationSource);
        }
    }
}
原文地址:https://www.cnblogs.com/little-white/p/3465965.html