protected override void OnStart(string[] args) { _logger.LogTextMessage("Starting service..."); LoadSettingsFromIniFile(); CreateSubscribers(); _logger.LogTextMessage("Starting service - OK"); }
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(); }
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"); }