Example #1
0
        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);
        }
Example #2
0
        /// <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");
            }
        }
Example #3
0
        /// <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);
            }
        }