public UdpSocketServer(IAppServer appServer, IPEndPoint localEndPoint, IRequestFilterFactory <TRequestInfo> requestFilterFactory) : base(appServer, localEndPoint) { if (typeof(TRequestInfo).IsSubclassOf(typeof(UdpRequestInfo))) { m_SessionIDFromRequestInfo = true; m_UdpRequestFilter = requestFilterFactory.CreateFilter(this.AppServer); } }
/// <summary> /// Setups the request filter factory. /// </summary> /// <param name="config">The config.</param> /// <param name="requestFilterFactory">The request filter factory.</param> /// <returns></returns> private bool SetupRequestFilterFactory(IServerConfig config, IRequestFilterFactory <TRequestInfo> requestFilterFactory) { //The protocol passed by programming has higher priority, then by config if (requestFilterFactory != null) { this.RequestFilterFactory = requestFilterFactory; } else { //There is a protocol configuration existing if (!string.IsNullOrEmpty(config.Protocol)) { IRequestFilterFactory <TRequestInfo> configuredRequestFilterFactory; try { configuredRequestFilterFactory = AssemblyUtil.CreateInstance <IRequestFilterFactory <TRequestInfo> >(config.Protocol); } catch (Exception e) { if (Logger.IsErrorEnabled) { Logger.Error(string.Format("Invalid configured protocol {0}.", config.Protocol), e); } return(false); } this.RequestFilterFactory = configuredRequestFilterFactory; } } //If there is no defined protocol, use CommandLineProtocol as default if (RequestFilterFactory == null) { if (Logger.IsErrorEnabled) { Logger.Error("Protocol hasn't been set!"); } return(false); } return(true); }
private bool SetupMedium(IRequestFilterFactory <TRequestInfo> requestFilterFactory, IEnumerable <IConnectionFilter> connectionFilters, IEnumerable <ICommandLoader> commandLoaders) { if (requestFilterFactory != null) { RequestFilterFactory = requestFilterFactory; } if (connectionFilters != null && connectionFilters.Any()) { if (m_ConnectionFilters == null) { m_ConnectionFilters = new List <IConnectionFilter>(); } m_ConnectionFilters.AddRange(connectionFilters); } SetupCommandLoader(commandLoaders); return(true); }
/// <summary> /// Creates the socket server. /// </summary> /// <typeparam name="TRequestInfo">The type of the request info.</typeparam> /// <param name="appServer">The app server.</param> /// <param name="listeners">The listeners.</param> /// <param name="config">The config.</param> /// <param name="requestFilterFactory">The request filter factory.</param> /// <returns></returns> public ISocketServer CreateSocketServer <TRequestInfo>(IAppServer appServer, ListenerInfo[] listeners, IServerConfig config, IRequestFilterFactory <TRequestInfo> requestFilterFactory) where TRequestInfo : IRequestInfo { if (requestFilterFactory == null) { throw new ArgumentNullException("requestFilterFactory"); } switch (config.Mode) { case (SocketMode.Tcp): return(new AsyncSocketServer(appServer, listeners)); case (SocketMode.Udp): return(new UdpSocketServer <TRequestInfo>(appServer, listeners)); default: throw new NotSupportedException("Unsupported SocketMode:" + config.Mode); } }
/// <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()); }
/// <summary> /// Initializes a new instance of the <see cref="AppServerBase<TAppSession, TRequestInfo>"/> class. /// </summary> /// <param name="requestFilterFactory">The request filter factory.</param> public AppServerBase(IRequestFilterFactory <TRequestInfo> requestFilterFactory) { this.RequestFilterFactory = requestFilterFactory; }
/// <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); }
/// <summary> /// Initializes a new instance of the <see cref="AppServer"/> class. /// </summary> /// <param name="requestFilterFactory">The request filter factory.</param> public AppServer(IRequestFilterFactory <StringRequestInfo> requestFilterFactory) : base(requestFilterFactory) { }
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); }
/// <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 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()); }