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
{
///
/// Bootstrap Factory
///
public static class BootstrapFactory
{
///
/// Creates the bootstrap.
///
/// The config.
///
public static IBootstrap CreateBootstrap(IConfigurationSource config)
{
if (config == null)
throw new ArgumentNullException("config");
IBootstrap bootstrap;
if (config.Isolation == IsolationMode.AppDomain)
bootstrap = new AppDomainBootstrap(config);
else if (config.Isolation == IsolationMode.Process)
bootstrap = new ProcessBootstrap(config);
else
bootstrap = new DefaultBootstrap(config);
var section = config as ConfigurationSection;
if (section != null)
ConfigurationWatcher.Watch(section, bootstrap);
return bootstrap;
}
///
/// Creates the bootstrap from app configuration's socketServer section.
///
///
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);
}
///
/// Creates the bootstrap.
///
/// Name of the config section.
///
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);
}
///
/// Creates the bootstrap from configuration file.
///
/// The configuration file.
///
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);
}
}
}