using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Ipc; using System.Text; using SuperSocket.SocketBase; using SuperSocket.SocketBase.Config; using SuperSocket.SocketBase.Logging; using SuperSocket.SocketBase.Provider; using SuperSocket.SocketBase.Metadata; namespace SuperSocket.SocketEngine { class DefaultBootstrapProcessWrap : DefaultBootstrapAppDomainWrap { public DefaultBootstrapProcessWrap(IBootstrap bootstrap, IConfigurationSource config, string startupConfigFile) : base(bootstrap, config, startupConfigFile) { } protected override IWorkItem CreateWorkItemInstance(string serviceTypeName, StatusInfoAttribute[] serverStatusMetadata) { return new ProcessAppServer(serviceTypeName, serverStatusMetadata); } } class ProcessBootstrap : AppDomainBootstrap { /// /// Initializes a new instance of the class. /// /// The config. public ProcessBootstrap(IConfigurationSource config) : base(config) { var clientChannel = ChannelServices.RegisteredChannels.FirstOrDefault(c => c is IpcClientChannel); if(clientChannel == null) { // Create the channel. clientChannel = new IpcClientChannel(); // Register the channel. ChannelServices.RegisterChannel(clientChannel, false); } } protected override IBootstrap CreateBootstrapWrap(IBootstrap bootstrap, IConfigurationSource config, string startupConfigFile) { return new DefaultBootstrapProcessWrap(bootstrap, config, startupConfigFile); } } }