Ejemplo n.º 1
0
        protected override void OnStart(string[] args)
        {
            _logger.LogTextMessage("Starting service...");

            LoadSettingsFromIniFile();

            CreateSubscribers();

            _logger.LogTextMessage("Starting service - OK");
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            /*var xmlDoc = new XmlDocument();
             * try
             * {
             *  xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
             *  var selectSingleNode = xmlDoc.SelectSingleNode("//system.diagnostics/sources/source/listeners/add[@name='messages']");
             *  if (selectSingleNode?.Attributes != null)
             *      selectSingleNode.Attributes["initializeData"].Value = (new D2PathHelper()).GetLogsPath() + "D2UserHostMessages.svclog";
             *  xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
             * }
             * catch (Exception exception)
             * {
             *  Console.WriteLine(exception.Message);
             *  Console.ReadLine();
             * }*/


            TextLogger _logger;
            List <SubscriberConfiguration> _configurations = new List <SubscriberConfiguration>();

            _logger = new TextLogger {
                LogFilePath = new D2PathHelper().GetAssemblyFolderPath() + "D2UserClientService.txt"
            };
            _passwordSubscribers = new ConcurrentBag <D2UserPasswordSubscriber>();

            //Ini file loading
            _logger.LogTextMessage("Loading ini...");
            D2IniFileHelper iniFile = new D2IniFileHelper(new D2PathHelper().GetAssemblyFolderPath() + "D2UserClientService.ini");

            for (int i = 0; i < (uint)iniFile.GetD2IniKeyValue("Addresses", "Count", 0); i++)
            {
                SubscriberConfiguration configuration = new SubscriberConfiguration
                {
                    Ip   = iniFile.GetD2IniKeyValue("Addresses", $"IP{i + 1}", ""),
                    Port = (uint)iniFile.GetD2IniKeyValue("Addresses", $"Port{i + 1}", 47700),
                    TaskCancellationToken = new CancellationTokenSource()
                };
                if (_configurations.All(o => o.Ip != configuration.Ip))
                {
                    _configurations.Add(configuration);
                }
            }
            _logger.LogTextMessage("Loading ini - OK");

            //Creating clients
            _logger.LogTextMessage("Starting client creation threads...");
            foreach (var config in _configurations)
            {
                var subscriber = new D2UserPasswordSubscriber(config, _logger);
                _subscriberCreationTasks.Add(Task.Factory.StartNew(() =>
                {
                    subscriber.AddPasswordProcessor(ShowLgnFile);
                    subscriber.AddReconnectionProcessor(ReconnectFaultedSubscriberChannel);
                    subscriber.Initialize();
                    if (subscriber.IsAlive)
                    {
                        _passwordSubscribers.Add(subscriber);
                    }
                }, config.TaskCancellationToken.Token));
            }
            _logger.LogTextMessage("Starting client creation threads - OK");


            Console.ReadLine();


            Console.WriteLine("Cancelling tasks...");
            foreach (var subConfig in _configurations)
            {
                subConfig.TaskCancellationToken.Cancel();
            }
            Console.WriteLine("Cancelling tasks  - ok");

            Console.WriteLine("Task.WaitAll...");
            try
            {
                Task.WaitAll(_subscriberCreationTasks.ToArray());
            }
            catch (Exception)
            {
            }
            Console.WriteLine("Task.WaitAll - ok");

            Console.WriteLine("Closing subscribers...");
            foreach (var subscriber in _passwordSubscribers)
            {
                subscriber.Close();
            }
            Console.WriteLine("Closing subscribers - ok");
            Console.ReadLine();
        }
Ejemplo n.º 3
0
        private void StopService()
        {
            if (_tasks != null)
            {
                _logger.LogTextMessage("Stopping timer thread...");
                _timerCancellationToken.Cancel();
                try
                {
                    Task.WaitAll(_tasks.ToArray());
                }
                catch (Exception)
                {
                }
                _logger.LogTextMessage("Stopping timer thread - OK");
            }

            _logger.LogTextMessage("Closing host...");
            try
            {
                _host?.Close();
                _host = null;
            }
            catch (Exception exception)
            {
                _logger.LogTextMessage($"Error while closing host:\n{exception.Message}\nStack:\n{exception.StackTrace}");
            }
            _logger.LogTextMessage("Closing host - OK");
        }