private void InitializeData(string version, ILoggerFactory loggerFactory, IPersistenceContextProvider contextProvider) { var serviceContainer = new ServiceContainer(); serviceContainer.AddService(typeof(ILoggerFactory), loggerFactory); serviceContainer.AddService(typeof(IPersistenceContextProvider), contextProvider); var plugInManager = new PlugInManager(null, loggerFactory, serviceContainer); plugInManager.DiscoverAndRegisterPlugInsOf <IDataInitializationPlugIn>(); var initialization = plugInManager.GetStrategy <IDataInitializationPlugIn>(version) ?? throw new Exception("Data initialization plugin not found"); initialization.CreateInitialData(3, true); }
/// <summary> /// The main entry point for the application. /// </summary> /// <param name="args">The arguments. </param> internal static void Main(string[] args) { // todo: create with HostBuilder var loggerFactory = new NullLoggerFactory().AddLog4Net(Log4NetConfigFilePath, true); logger = loggerFactory.CreateLogger <Program>(); var addressResolver = IpAddressResolverFactory.DetermineIpResolver(args, loggerFactory); var settings = new Settings("ChatServer.cfg"); var serviceContainer = new ServiceContainer(); serviceContainer.AddService(typeof(ILoggerFactory), loggerFactory); int chatServerListenerPort = settings.ChatServerListenerPort ?? 55980; int exDbPort = settings.ExDbPort ?? 55906; string exDbHost = settings.ExDbHost ?? "127.0.0.1"; try { // To make the chat server use our configured encryption key, we need to trick a bit. We add an endpoint with a special client version which is defined in the plugin. var configuration = new ChatServerSettings(); configuration.Endpoints.Add(new ChatServerEndpoint { ClientVersion = ConfigurableNetworkEncryptionPlugIn.Version, NetworkPort = chatServerListenerPort }); var pluginManager = new PlugInManager(null, loggerFactory, serviceContainer); pluginManager.DiscoverAndRegisterPlugInsOf <INetworkEncryptionFactoryPlugIn>(); var chatServer = new ChatServer(configuration, addressResolver, loggerFactory, pluginManager); chatServer.Start(); var exDbClient = new ExDbClient(exDbHost, exDbPort, chatServer, chatServerListenerPort, loggerFactory); logger.LogInformation("ChatServer started and ready"); while (Console.ReadLine() != "exit") { // keep application running } exDbClient.Disconnect(); chatServer.Shutdown(); } catch (Exception ex) { logger.LogCritical(ex, "Unexpected error occured"); } }
/// <summary> /// Initializes a new instance of the <see cref="ChatServer" /> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="addressResolver">The address resolver which returns the address on which the listener will be bound to.</param> public ChatServer(ChatServerSettings settings, IIpAddressResolver addressResolver) { this.settings = settings; this.addressResolver = addressResolver; this.manager = new ChatRoomManager(); this.randomNumberGenerator = RandomNumberGenerator.Create(); this.clientCleanupTimer = new Timer(this.settings.ClientCleanUpInterval.TotalMilliseconds); this.clientCleanupTimer.Elapsed += this.ClientCleanupInactiveClients; this.clientCleanupTimer.Start(); this.roomCleanupTimer = new Timer(this.settings.RoomCleanUpInterval.TotalMilliseconds); this.roomCleanupTimer.Elapsed += this.ClientCleanupUnusedRooms; this.roomCleanupTimer.Start(); var plugInManager = new PlugInManager(); plugInManager.DiscoverAndRegisterPlugInsOf <INetworkEncryptionFactoryPlugIn>(); foreach (var endpoint in this.settings.Endpoints) { var listener = new ChatServerListener(endpoint, plugInManager); listener.ClientAccepted += this.ChatClientAccepted; listener.ClientAccepting += this.ChatClientAccepting; this.listeners.Add(listener); } }