Beispiel #1
0
        /// <summary>
        /// Setups the specified root config, this method used for programming setup
        /// </summary>
        /// <param name="rootConfig">The root config.</param>
        /// <param name="config">The config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <param name="requestFilterFactory">The request filter factory.</param>
        /// <param name="logFactory">The log factory.</param>
        /// <param name="connectionFilters">The connection filters.</param>
        /// <param name="commandLoaders">The command loaders.</param>
        /// <returns></returns>
        public bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, IRequestFilterFactory <TRequestInfo> requestFilterFactory = null, ILogFactory logFactory = null, IEnumerable <IConnectionFilter> connectionFilters = null, IEnumerable <ICommandLoader> commandLoaders = null)
        {
            SetupBasic(rootConfig, config, socketServerFactory);

            if (!SetupLogFactory(logFactory))
            {
                return(false);
            }

            Logger = CreateLogger(this.Name);

            if (!SetupMedium(requestFilterFactory, connectionFilters, commandLoaders))
            {
                return(false);
            }

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

            if (!Setup(rootConfig, config))
            {
                return(false);
            }

            return(SetupFinal());
        }
Beispiel #2
0
        public override bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, SocketBase.Protocol.ICustomProtocol <SocketBase.Command.StringCommandInfo> protocol)
        {
            if (!base.Setup(rootConfig, config, socketServerFactory, protocol))
            {
                return(false);
            }

            var childrenConfig = config.GetChildConfig <ChildConfigCollection>("children");

            ChildConfigGlobalValue = childrenConfig.GlobalValue;

            var sum = 0;
            var pro = 1;

            foreach (var c in childrenConfig.OfType <ChildConfig>())
            {
                sum += c.Value;
                pro *= c.Value;
            }

            ChildConfigValueSum             = sum;
            ChildConfigValueMultiplyProduct = pro;

            var childConfig = config.GetChildConfig <ChildConfig>("child");

            ChildConfigValue = childConfig.Value;

            return(true);
        }
        /// <summary>
        /// Setups the specified root config, this method used for programming setup
        /// </summary>
        /// <param name="rootConfig">The root config.</param>
        /// <param name="config">The server config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <param name="receiveFilterFactory">The Receive filter factory.</param>
        /// <param name="logFactory">The log factory.</param>
        /// <param name="connectionFilters">The connection filters.</param>
        /// <param name="commandLoaders">The command loaders.</param>
        /// <returns></returns>
        public bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory = null, IReceiveFilterFactory <TRequestInfo> receiveFilterFactory = null, ILogFactory logFactory = null, IEnumerable <IConnectionFilter> connectionFilters = null)
        {
            TrySetInitializedState();

            SetupBasic(rootConfig, config, socketServerFactory);

            SetupLogFactory(logFactory);

            Logger = CreateLogger(this.Name);

            if (!SetupMedium(receiveFilterFactory, connectionFilters))
            {
                return(false);
            }

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

            if (!Setup(rootConfig, config))
            {
                return(false);
            }

            if (!SetupFinal())
            {
                return(false);
            }

            m_StateCode = ServerStateConst.NotStarted;
            return(true);
        }
        private void SetupBasic(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory)
        {
            if (rootConfig == null)
            {
                throw new ArgumentNullException("rootConfig");
            }

            RootConfig = rootConfig;

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

            if (!string.IsNullOrEmpty(config.Name))
            {
                m_Name = config.Name;
            }
            else
            {
                m_Name = string.Format("{0}-{1}", this.GetType().Name, Math.Abs(this.GetHashCode()));
            }

            Config = config;

            SetDefaultCulture(rootConfig, config);

            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>()))
                {
                    throw new Exception("Failed to configure thread pool!");
                }

                m_ThreadPoolConfigured = true;
            }

            if (socketServerFactory == null)
            {
                var socketServerFactoryType =
                    Type.GetType("SuperSocket.SocketEngine.SocketServerFactory, SuperSocket.SocketEngine", true);

                socketServerFactory = (ISocketServerFactory)Activator.CreateInstance(socketServerFactoryType);
            }

            m_SocketServerFactory = socketServerFactory;

            //Read text encoding from the configuration
            if (!string.IsNullOrEmpty(config.TextEncoding))
            {
                TextEncoding = Encoding.GetEncoding(config.TextEncoding);
            }
            else
            {
                TextEncoding = new ASCIIEncoding();
            }
        }
Beispiel #5
0
        /// <summary>
        /// Setups the specified root config, used for programming setup
        /// </summary>
        /// <param name="rootConfig">The root config.</param>
        /// <param name="config">The config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <param name="providers">The providers.</param>
        /// <returns></returns>
        public virtual bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, params object[] providers)
        {
            SetupBasic(rootConfig, config, socketServerFactory);

            if (!SetupLogFactory(GetProviderInstance <ILogFactory>(providers)))
            {
                return(false);
            }

            Logger = CreateLogger(this.Name);

            if (!SetupMedium(GetProviderInstance <IRequestFilterFactory <TRequestInfo> >(providers), GetProviderInstance <IEnumerable <IConnectionFilter> >(providers), GetProviderInstance <IEnumerable <ICommandLoader> >(providers)))
            {
                return(false);
            }

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

            if (!Setup(rootConfig, config))
            {
                return(false);
            }

            return(SetupFinal());
        }
Beispiel #6
0
        public virtual bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, ICustomProtocol <TCommandInfo> protocol)
        {
            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");
            }

            Config       = config;
            Name         = config.Name;
            m_LogCommand = config.LogCommand;

            m_SocketServerFactory = socketServerFactory;

            SetupLogger();

            if (!SetupLocalEndpoint(config))
            {
                Logger.LogError("Invalid config ip/port");
                return(false);
            }

            if (!SetupProtocol(config, protocol))
            {
                return(false);
            }

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

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

            return(SetupSocketServer());
        }
 /// <summary>
 /// Setups with the specified ip and port.
 /// </summary>
 /// <param name="ip">The ip.</param>
 /// <param name="port">The port.</param>
 /// <param name="socketServerFactory">The socket server factory.</param>
 /// <param name="receiveFilterFactory">The Receive filter factory.</param>
 /// <param name="logFactory">The log factory.</param>
 /// <param name="connectionFilters">The connection filters.</param>
 /// <returns>return setup result</returns>
 public bool Setup(string ip, int port, ISocketServerFactory socketServerFactory = null, IReceiveFilterFactory <TRequestInfo> receiveFilterFactory = null, ILogFactory logFactory = null, IEnumerable <IConnectionFilter> connectionFilters = null)
 {
     return(Setup(new ServerConfig
     {
         Ip = ip,
         Port = port
     },
                  socketServerFactory,
                  receiveFilterFactory,
                  logFactory,
                  connectionFilters));
 }
        protected override bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, IRequestFilterFactory <StringRequestInfo> requestFilterFactory)
        {
            if (!base.Setup(rootConfig, config, socketServerFactory, requestFilterFactory))
            {
                return(false);
            }

            int      interval         = config.Options.GetValue("MonitorInterval", "1").ToInt32();
            TimeSpan intervalTimeSpan = new TimeSpan(0, interval, 0);

            m_MonitorTimer = new Timer(new TimerCallback(OnMonitorTimerCallback), new object(), intervalTimeSpan, intervalTimeSpan);

            return(true);
        }
Beispiel #9
0
        public override bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, ICustomProtocol <StringCommandInfo> protocol)
        {
            if (!base.Setup(rootConfig, config, socketServerFactory, protocol))
            {
                return(false);
            }

            int      interval         = config.Options.GetValue("MonitorInterval", "1").ToInt32();
            TimeSpan intervalTimeSpan = new TimeSpan(0, interval, 0);

            m_MonitorTimer = new Timer(new TimerCallback(OnMonitorTimerCallback), new object(), intervalTimeSpan, intervalTimeSpan);

            return(true);
        }
Beispiel #10
0
        /// <summary>
        /// Setups the specified root config.
        /// </summary>
        /// <param name="rootConfig">The root config.</param>
        /// <param name="config">The config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <param name="requestFilterFactory">The request filter factory.</param>
        /// <returns></returns>
        protected override bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, IRequestFilterFactory <BinaryRequestInfo> requestFilterFactory)
        {
            var policyRequest = config.Options.GetValue("policyRequest");

            if (!string.IsNullOrEmpty(policyRequest))
            {
                m_PolicyRequest = policyRequest;
            }

            m_ExpectedReceivedLength = Encoding.UTF8.GetByteCount(m_PolicyRequest);

            requestFilterFactory = new FixSizeRequestFilterFactory(m_ExpectedReceivedLength);

            if (!base.Setup(rootConfig, config, socketServerFactory, requestFilterFactory))
            {
                return(false);
            }

            m_PolicyFile = config.Options.GetValue("policyFile");

            if (string.IsNullOrEmpty(m_PolicyFile))
            {
                if (Logger.IsErrorEnabled)
                {
                    Logger.Error("Configuration option policyFile is required!");
                }
                return(false);
            }

            if (!Path.IsPathRooted(m_PolicyFile))
            {
                m_PolicyFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, m_PolicyFile);
            }

            if (!File.Exists(m_PolicyFile))
            {
                if (Logger.IsErrorEnabled)
                {
                    Logger.Error("The specified policyFile doesn't exist! " + m_PolicyFile);
                }
                return(false);
            }

            PolicyResponse = SetupPolicyResponse(File.ReadAllBytes(m_PolicyFile));

            this.RequestHandler += new RequestHandler <PolicySession, BinaryRequestInfo>(PolicyServer_RequestHandler);

            return(true);
        }
        /// <summary>
        /// Setups with the specified parameters.
        /// </summary>
        /// <param name="rootConfig">The root config.</param>
        /// <param name="config">The config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <param name="protocol">The protocol.</param>
        /// <returns></returns>
        protected override bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory, IRequestFilterFactory <IWebSocketFragment> protocol)
        {
            if (!base.Setup(rootConfig, config, socketServerFactory, protocol))
            {
                return(false);
            }

            var users = config.GetChildConfig <UserConfigCollection>("users");

            if (users == null || users.Count <= 0)
            {
                Logger.Error("No user defined");
                return(false);
            }

            m_UsersDict = new Dictionary <string, UserConfig>(StringComparer.OrdinalIgnoreCase);

            foreach (var u in users)
            {
                m_UsersDict.Add(u.Name, u);
            }

            return(true);
        }
Beispiel #12
0
        private void SetupBasic(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory)
        {
            if (rootConfig == null)
            {
                throw new ArgumentNullException("rootConfig");
            }

            RootConfig = rootConfig;

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

            Config = config;

            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>()))
                {
                    throw new Exception("Failed to configure thread pool!");
                }

                m_ThreadPoolConfigured = true;
            }

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

            m_SocketServerFactory = socketServerFactory;
        }
Beispiel #13
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());
        }
Beispiel #14
0
 /// <summary>
 /// Setups the appServer instance
 /// </summary>
 /// <param name="rootConfig">The SuperSocket root config.</param>
 /// <param name="config">The socket server instance config.</param>
 /// <param name="socketServerFactory">The socket server factory.</param>
 /// <returns></returns>
 protected virtual bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory)
 {
     return(Setup(rootConfig, config, socketServerFactory, null));
 }
Beispiel #15
0
 public bool Setup(IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory)
 {
     return(Setup(rootConfig, config, socketServerFactory, null));
 }
Beispiel #16
0
        /// <summary>
        /// Setups the specified root config.
        /// </summary>
        /// <param name="bootstrap">The bootstrap.</param>
        /// <param name="rootConfig">The SuperSocket root config.</param>
        /// <param name="config">The socket server instance config.</param>
        /// <param name="socketServerFactory">The socket server factory.</param>
        /// <returns></returns>
        bool IAppServer.Setup(IBootstrap bootstrap, IRootConfig rootConfig, IServerConfig config, ISocketServerFactory socketServerFactory)
        {
            if (bootstrap == null)
            {
                throw new ArgumentNullException("bootstrap");
            }

            Bootstrap = bootstrap;

            return(Setup(rootConfig, config, socketServerFactory));
        }
 static SocketServerFactory()
 {
     m_Instance = new SocketServerFactory();
 }
 /// <summary>
 /// Setups with the specified config.
 /// </summary>
 /// <param name="config">The server config.</param>
 /// <param name="socketServerFactory">The socket server factory.</param>
 /// <param name="receiveFilterFactory">The receive filter factory.</param>
 /// <param name="logFactory">The log factory.</param>
 /// <param name="connectionFilters">The connection filters.</param>
 /// <param name="commandLoaders">The command loaders.</param>
 /// <returns></returns>
 public bool Setup(IServerConfig config, ISocketServerFactory socketServerFactory = null, IReceiveFilterFactory <TRequestInfo> receiveFilterFactory = null, ILogFactory logFactory = null, IEnumerable <IConnectionFilter> connectionFilters = null)
 {
     return(Setup(new RootConfig(), config, socketServerFactory, receiveFilterFactory, logFactory, connectionFilters));
 }