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");
+ }
}
}