public bool Configure <TPackageInfo>(ServerOptions options, IServiceCollection services = null, IPipelineFilterFactory <TPackageInfo> pipelineFilterFactory = null, Action <IAppSession, TPackageInfo> packageHandler = null) where TPackageInfo : class { if (options == null) { throw new ArgumentNullException(nameof(options)); } Options = options; if (services == null) { services = new ServiceCollection(); } // prepare service collections _serviceCollection = services.AddOptions(); // activate options // build service provider _serviceProvider = services.BuildServiceProvider(); // initialize logger factory LoggerFactory = _serviceProvider.GetService <ILoggerFactory>(); _logger = LoggerFactory.CreateLogger("SuperSocket"); if (pipelineFilterFactory == null) { pipelineFilterFactory = _serviceProvider.GetService <IPipelineFilterFactory <TPackageInfo> >(); } if (pipelineFilterFactory == null) { throw new ArgumentNullException(nameof(pipelineFilterFactory)); } var listenerFactory = _serviceProvider.GetService <IListenerFactory>(); if (listenerFactory == null) { listenerFactory = new TcpSocketListenerFactory(); } _listeners = new List <IListener>(); foreach (var l in options.Listeners) { var listener = listenerFactory.CreateListener <TPackageInfo>(l, LoggerFactory, pipelineFilterFactory); listener.NewClientAccepted += OnNewClientAccept; if (packageHandler != null) { _sessionInitializer = (s) => { if (s.Channel is IChannel <TPackageInfo> channel) { channel.PackageReceived += (ch, p) => { try { packageHandler(s, p); } catch (Exception e) { OnSessionError(s, e); } }; } }; } _listeners.Add(listener); } return(_configured = true); }
protected SuperSocketServer CreateSocketServer <TPackageInfo>(Dictionary <string, string> configDict = null, Func <IAppSession, TPackageInfo, Task> packageHandler = null, IPipelineFilterFactory <TPackageInfo> filterFactory = null) where TPackageInfo : class { if (configDict == null) { configDict = new Dictionary <string, string> { { "serverOptions:name", "TestServer" }, { "serverOptions:listeners:0:ip", "Any" }, { "serverOptions:listeners:0:port", "4040" } }; } var server = new SuperSocketServer(); var services = new ServiceCollection(); var builder = new ConfigurationBuilder().AddInMemoryCollection(configDict); var config = builder.Build(); services.AddLogging(loggingBuilder => loggingBuilder.AddConsole()); RegisterServices(services); var serverOptions = new ServerOptions(); config.GetSection("serverOptions").Bind(serverOptions); Assert.True(server.Configure(serverOptions, services, packageHandler: packageHandler, pipelineFilterFactory: filterFactory)); return(server); }