diff --git a/Barsik.csproj b/Barsik.csproj index 07a09e3..7147de0 100644 --- a/Barsik.csproj +++ b/Barsik.csproj @@ -10,6 +10,7 @@ + diff --git a/Program.cs b/Program.cs index 083a25e..acbed3f 100644 --- a/Program.cs +++ b/Program.cs @@ -1,6 +1,9 @@ using IniParser; using NLog; using System.Collections.Generic; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.Globalization; using System.IO; using System.Reflection; using System.Threading; @@ -16,16 +19,33 @@ namespace Barsik static void Main(string[] args) { - Logging.Setup(); - logger.Info("Barsik monitoring service starting"); + CultureInfo.CurrentCulture = new CultureInfo("en-US"); + var rootCommand = new RootCommand(); + var runCommand = new Command("run") + { + new Option("--config", () => "", "Path to configuration file") + }; + runCommand.Handler = CommandHandler.Create(RunService); + rootCommand.AddCommand(runCommand); + rootCommand.InvokeAsync(args).Wait(); + } - registers = new RegistersContainer(); - var server = new ModbusServer(registers); + static void RunService(string configPath) + { + 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")); + if (string.IsNullOrEmpty(configPath)) + { + string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + configPath = Path.Combine(assemblyFolder, "barsik.ini"); + } + var data = configParser.ReadFile(configPath); foreach (var section in data.Sections) { if (section.SectionName.StartsWith("Unit")) @@ -39,10 +59,10 @@ namespace Barsik } } } - logger.Info("Configuration loaded, we have " + units.Count + " units"); - server.Port = int.Parse(data["Server"]["Port"]); + logger.Info("Configuration loaded, we have " + units.Count + " units"); + server.Port = int.Parse(data["Server"]["Port"]); server.Run(); - logger.Info("Exiting"); - } + logger.Info("Exiting"); + } } }