using IniParser; using NLog; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Threading; namespace Barsik { class Program { private static RegistersContainer registers; private static List units; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { Logging.Setup(); logger.Info("Barsik monitoring service starting"); registers = new RegistersContainer(); var server = new ModbusServer(registers); units = new List(); var configParser = new FileIniDataParser(); string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var data = configParser.ReadFile(Path.Combine(assemblyFolder, "barsik.ini")); foreach (var section in data.Sections) { if (section.SectionName.StartsWith("Unit")) { var unit = BaseMonitoringUnit.Create(section, registers); if (unit != null) { units.Add(unit); Thread unitThread = new Thread(new ThreadStart(unit.Run)); unitThread.Start(); } } } logger.Info("Configuration loaded, we have " + units.Count + " units"); server.Port = int.Parse(data["Server"]["Port"]); server.Run(); logger.Info("Exiting"); } } }