Exemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerConfig"/> class.
        /// </summary>
        /// <param name="serverConfig">The server config.</param>
        public ServerConfig(IServerConfig serverConfig)
        {
            serverConfig.CopyPropertiesTo(this);

            this.Options        = serverConfig.Options;
            this.OptionElements = serverConfig.OptionElements;

            if (serverConfig.Certificate != null)
            {
                this.Certificate = serverConfig.Certificate.MakeCopy <CertificateConfig>();
            }

            if (serverConfig.Listeners != null && serverConfig.Listeners.Any())
            {
                this.Listeners = serverConfig.Listeners.MakeCopy <ListenerConfig>();
            }

            if (serverConfig.CommandAssemblies != null && serverConfig.CommandAssemblies.Any())
            {
                this.CommandAssemblies = serverConfig.CommandAssemblies.MakeCopy <CommandAssemblyConfig>();
            }

            if (serverConfig.BufferPools != null && serverConfig.BufferPools.Any())
            {
                this.BufferPools = serverConfig.BufferPools.MakeCopy <BufferPoolConfig>();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerConfig"/> class.
        /// </summary>
        /// <param name="serverConfig">The server config.</param>
        public ServerConfig(IServerConfig serverConfig)
#if NETSTANDARD2_0
            : base(new List <IConfigurationProvider>())
#endif
        {
            serverConfig.CopyPropertiesTo(this);

            this.Options        = serverConfig.Options;
            this.OptionElements = serverConfig.OptionElements;

            if (serverConfig.Certificate != null)
            {
                this.Certificate = serverConfig.Certificate.CopyPropertiesTo(new CertificateConfig());
            }

            if (serverConfig.Listeners != null && serverConfig.Listeners.Any())
            {
                this.Listeners = serverConfig.Listeners.Select(l => l.CopyPropertiesTo(new ListenerConfig())).OfType <ListenerConfig>().ToArray();
            }

            if (serverConfig.CommandAssemblies != null && serverConfig.CommandAssemblies.Any())
            {
                this.CommandAssemblies = serverConfig.CommandAssemblies.Select(c => c.CopyPropertiesTo(new CommandAssemblyConfig())).OfType <CommandAssemblyConfig>().ToArray();
            }
        }
Exemplo n.º 3
0
        private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
        {
            var config = new ServerConfig();

            serverConfig.CopyPropertiesTo(config);

            if (serverConfig.Port > 0)
            {
                var endPointKey      = serverConfig.Name + "_" + serverConfig.Port;
                var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[endPointKey];
                if (instanceEndpoint == null)
                {
                    Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", endPointKey), "Error");
                    return(serverConfig);
                }

                var ipEndpoint = instanceEndpoint.IPEndpoint;
                config.Ip   = ipEndpoint.Address.ToString();
                config.Port = ipEndpoint.Port;
            }

            if (config.Listeners != null && config.Listeners.Any())
            {
                var listeners = config.Listeners.ToArray();

                var newListeners = new List <ListenerConfig>(listeners.Length);

                for (var i = 0; i < listeners.Length; i++)
                {
                    var listener = listeners[i];

                    var endPointKey      = serverConfig.Name + "_" + listener.Port;
                    var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[endPointKey];
                    if (instanceEndpoint == null)
                    {
                        Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", endPointKey), "Error");
                        return(serverConfig);
                    }

                    var newListener = new ListenerConfig();
                    newListener.Ip      = instanceEndpoint.IPEndpoint.Address.ToString();
                    newListener.Port    = instanceEndpoint.IPEndpoint.Port;
                    newListener.Backlog = listener.Backlog;

                    newListeners.Add(newListener);
                }

                config.Listeners = newListeners;
            }

            return(config);
        }
Exemplo n.º 4
0
        private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
        {
            var config = new ServerConfig();
            serverConfig.CopyPropertiesTo(config);

            if (serverConfig.Port > 0)
            {
                var endPointKey = serverConfig.Name + "_" + serverConfig.Port;
                var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[endPointKey];
                if (instanceEndpoint == null)
                {
                    Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", endPointKey), "Error");
                    return serverConfig;
                }

                var ipEndpoint = instanceEndpoint.IPEndpoint;
                config.Ip = ipEndpoint.Address.ToString();
                config.Port = ipEndpoint.Port;
            }

            if (config.Listeners != null && config.Listeners.Any())
            {
                var listeners = config.Listeners.ToArray();

                var newListeners = new List<ListenerConfig>(listeners.Length);

                for (var i = 0; i < listeners.Length; i++)
                {
                    var listener = listeners[i];

                    var endPointKey = serverConfig.Name + "_" + listener.Port;
                    var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[endPointKey];
                    if (instanceEndpoint == null)
                    {
                        Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", endPointKey), "Error");
                        return serverConfig;
                    }

                    var newListener = new ListenerConfig();
                    newListener.Ip = instanceEndpoint.IPEndpoint.Address.ToString();
                    newListener.Port = instanceEndpoint.IPEndpoint.Port;
                    newListener.Backlog = listener.Backlog;

                    newListeners.Add(newListener);
                }

                config.Listeners = newListeners;
            }

            return config;
        }
        void IWorkItemBase.ReportPotentialConfigChange(IServerConfig config)
        {
            var oldConfig = this.Config;

            CheckConfigOptionsChange(oldConfig.Options, config.Options);
            CheckConfigOptionsChange(oldConfig.OptionElements, config.OptionElements);

            var updatableConfig = oldConfig as ServerConfig;

            if (updatableConfig == null)
            {
                return;
            }

            config.CopyPropertiesTo(p => p.GetCustomAttributes(typeof(HotUpdateAttribute), true).Length > 0, updatableConfig);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerConfig"/> class.
        /// </summary>
        /// <param name="serverConfig">The server config.</param>
        public ServerConfig(IServerConfig serverConfig)
        {
            serverConfig.CopyPropertiesTo(this);

            this.Options        = serverConfig.Options;
            this.OptionElements = serverConfig.OptionElements;

            if (serverConfig.Certificate != null)
            {
                this.Certificate = serverConfig.Certificate.CopyPropertiesTo(new CertificateConfig());
            }

            if (serverConfig.Listeners != null && serverConfig.Listeners.Any())
            {
                this.Listeners = serverConfig.Listeners.Select(l => l.CopyPropertiesTo(new ListenerConfig()));
            }
        }
Exemplo n.º 7
0
        private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
        {
            var config = new ServerConfig();
            serverConfig.CopyPropertiesTo(config);

            var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[serverConfig.Name + "Endpoint"];
            if (instanceEndpoint == null)
            {
                Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", serverConfig.Name + "Endpoint"), "Error");
                return serverConfig;
            }

            var ipEndpoint = instanceEndpoint.IPEndpoint;
            config.Ip = ipEndpoint.Address.ToString();
            config.Port = ipEndpoint.Port;
            return config;
        }
Exemplo n.º 8
0
        private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
        {
            var config = new ServerConfig();

            serverConfig.CopyPropertiesTo(config);

            RoleInstanceEndpoint instanceEndpoint;

            if (!RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.TryGetValue(serverConfig.Name + "Endpoint", out instanceEndpoint))
            {
                Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", serverConfig.Name + "Endpoint"), "Error");
                return(serverConfig);
            }

            var ipEndpoint = instanceEndpoint.IPEndpoint;

            config.Ip   = ipEndpoint.Address.ToString();
            config.Port = ipEndpoint.Port;

            List <int> dataPorts = new List <int>();

            int dataPortIndex = 0;

            while (true)
            {
                var dataPortKey = "FTPDataPort" + dataPortIndex++;

                RoleInstanceEndpoint dataEndpoint;
                if (!RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.TryGetValue(dataPortKey, out dataEndpoint))
                {
                    break;
                }

                dataPorts.Add(dataEndpoint.IPEndpoint.Port);
            }

            if (dataPorts.Count > 0)
            {
                config.Options["dataPort"] = string.Join(",", dataPorts.Select(p => p.ToString()).ToArray());
            }

            return(config);
        }
Exemplo n.º 9
0
        private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
        {
            var config = new ServerConfig();

            serverConfig.CopyPropertiesTo(config);

            var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[serverConfig.Name + "Endpoint"];

            if (instanceEndpoint == null)
            {
                Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", serverConfig.Name + "Endpoint"), "Error");
                return(serverConfig);
            }

            var ipEndpoint = instanceEndpoint.IPEndpoint;

            config.Ip   = ipEndpoint.Address.ToString();
            config.Port = ipEndpoint.Port;
            return(config);
        }
Exemplo n.º 10
0
        private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
        {
            var config = new ServerConfig();
            serverConfig.CopyPropertiesTo(config);

            RoleInstanceEndpoint instanceEndpoint;
            if (!RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.TryGetValue(serverConfig.Name + "Endpoint", out instanceEndpoint))
            {
                Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", serverConfig.Name + "Endpoint"), "Error");
                return serverConfig;
            }

            var ipEndpoint = instanceEndpoint.IPEndpoint;
            config.Ip = ipEndpoint.Address.ToString();
            config.Port = ipEndpoint.Port;

            List<int> dataPorts = new List<int>();

            int dataPortIndex = 0;

            while (true)
            {
                var dataPortKey = "FTPDataPort" + dataPortIndex++;

                RoleInstanceEndpoint dataEndpoint;
                if (!RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.TryGetValue(dataPortKey, out dataEndpoint))
                    break;

                dataPorts.Add(dataEndpoint.IPEndpoint.Port);
            }

            if (dataPorts.Count > 0)
                config.Options["dataPort"] = string.Join(",", dataPorts.Select(p => p.ToString()).ToArray());

            return config;
        }
Exemplo n.º 11
0
        /// <summary>
        /// Setups the appServer instance
        /// </summary>
        /// <param name="rootConfig">The root config.</param>
        /// <param name="config">The socket server instance config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <param name="requestFilterFactory">The request filter factory.</param>
        /// <returns></returns>
        protected virtual bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, IRequestFilterFactory <TRequestInfo> requestFilterFactory)
        {
            if (rootConfig == null)
            {
                throw new ArgumentNullException("rootConfig");
            }

            RootConfig = rootConfig;

            if (!m_ThreadPoolConfigured)
            {
                if (!TheadPoolEx.ResetThreadPool(rootConfig.MaxWorkingThreads >= 0 ? rootConfig.MaxWorkingThreads : new Nullable <int>(),
                                                 rootConfig.MaxCompletionPortThreads >= 0 ? rootConfig.MaxCompletionPortThreads : new Nullable <int>(),
                                                 rootConfig.MinWorkingThreads >= 0 ? rootConfig.MinWorkingThreads : new Nullable <int>(),
                                                 rootConfig.MinCompletionPortThreads >= 0 ? rootConfig.MinCompletionPortThreads : new Nullable <int>()))
                {
                    return(false);
                }

                m_ThreadPoolConfigured = true;
            }

            if (config == null)
            {
                throw new ArgumentNullException("config");
            }

            if (!(config is ServerConfig))
            {
                //Use config plain model directly to avoid extra object casting in runtime
                var newConfig = new ServerConfig();
                config.CopyPropertiesTo(newConfig);
                config = newConfig;
            }

            Config = config;

            m_SocketServerFactory = socketServerFactory;

            SetupLogger();

            if (!SetupSecurity(config))
            {
                return(false);
            }

            if (!SetupListeners(config))
            {
                if (Logger.IsErrorEnabled)
                {
                    Logger.Error("Invalid config ip/port");
                }

                return(false);
            }

            if (!SetupRequestFilterFactory(config, requestFilterFactory))
            {
                return(false);
            }

            m_CommandLoaders = new List <ICommandLoader>
            {
                new ReflectCommandLoader()
            };

            if (Config.EnableDynamicCommand)
            {
                ICommandLoader dynamicCommandLoader;

                try
                {
                    dynamicCommandLoader = AssemblyUtil.CreateInstance <ICommandLoader>("SuperSocket.Dlr.DynamicCommandLoader, SuperSocket.Dlr");
                }
                catch (Exception e)
                {
                    if (Logger.IsErrorEnabled)
                    {
                        Logger.Error("The file SuperSocket.Dlr is required for dynamic command support!", e);
                    }

                    return(false);
                }

                m_CommandLoaders.Add(dynamicCommandLoader);
            }

            if (!SetupCommands(m_CommandDict))
            {
                return(false);
            }

            return(SetupSocketServer());
        }
Exemplo n.º 12
0
 public ServerConfig(IServerConfig serverConfig)
 {
     serverConfig.CopyPropertiesTo(this);
 }
Exemplo n.º 13
0
        public ServerConfig(IServerConfig serverConfig)
        {
#if !DOTNETCORE
            serverConfig.CopyPropertiesTo(this);
#endif
        }