diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 16b88a99..4f567684 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -16,7 +16,7 @@ variables: buildConfiguration: 'Release' major: 5 minor: 0 - patch: 3 + patch: 4 AssemblyVersion: $(major).$(minor).$(patch) NugetVersion: $(major).$(minor).$(patch)-beta diff --git a/src/Console/Console.csproj b/src/Console/Console.csproj index 9fb538dd..740a49b8 100644 --- a/src/Console/Console.csproj +++ b/src/Console/Console.csproj @@ -20,13 +20,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Console/Program.cs b/src/Console/Program.cs index 881a96c2..a6dc093f 100644 --- a/src/Console/Program.cs +++ b/src/Console/Program.cs @@ -30,7 +30,6 @@ namespace Console; internal static class Program { - private static ILogger _panelLogger; private static ControlPanel _controlPanel; private static readonly Queue Messages = new (); private static readonly object MessageLock = new (); @@ -58,7 +57,7 @@ internal static class Program private static async Task Main() { XmlConfigurator.Configure( - LogManager.GetRepository(Assembly.GetAssembly(typeof(LogManager))), + LogManager.GetRepository(Assembly.GetEntryAssembly() ?? Assembly.GetCallingAssembly()), new FileInfo("log4net.config")); _lastConfigFilePath = Path.Combine(Environment.CurrentDirectory, "appsettings.config"); @@ -66,9 +65,8 @@ private static async Task Main() var factory = new LoggerFactory(); factory.AddLog4Net(); - _panelLogger = factory.CreateLogger(); - _controlPanel = new ControlPanel(_panelLogger); + _controlPanel = new ControlPanel(factory); _settings = GetConnectionSettings(); @@ -96,10 +94,8 @@ private static async Task Main() new MenuItem("_Quit", "", () => { SaveConfigurationSettings(_settings); - - Application.RequestStop(); - - Environment.Exit(Environment.ExitCode); + + Application.Shutdown(); }) }), new MenuBarItem("Co_nnections", new[] diff --git a/src/OSDP.Net.Tests/ControlPanelTest.cs b/src/OSDP.Net.Tests/ControlPanelTest.cs index 48a7b752..4a241bbf 100644 --- a/src/OSDP.Net.Tests/ControlPanelTest.cs +++ b/src/OSDP.Net.Tests/ControlPanelTest.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using NUnit.Framework; using OSDP.Net.Connections; @@ -24,7 +25,7 @@ public async Task DeviceGoesOnlineTest() // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); Guid id = panel.StartConnection(mockConnection.Object); panel.AddDevice(id, 0, true, false); @@ -40,7 +41,7 @@ public async Task ShutdownTest() // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); Guid id = panel.StartConnection(mockConnection.Object); panel.AddDevice(id, 0, true, false); @@ -59,7 +60,7 @@ public async Task StartConnectionTest() { // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); // Act Guid id = panel.StartConnection(mockConnection.Object); @@ -75,7 +76,7 @@ public void StartConnectionWithSameConnectionTwiceTest() { // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); var id = panel.StartConnection(mockConnection.Object); // Act/Assert @@ -91,7 +92,7 @@ public void StartSameConnectionConcurrentlyShouldOnlyStartItOnce() // Arrange var mockConnection = new MockConnection(); var instance = mockConnection.Object; - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); // Act var tasks = Enumerable @@ -115,7 +116,7 @@ public void StopSameConnectionConcurrentlyShouldSucceed() { // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); var id = panel.StartConnection(mockConnection.Object); // Act @@ -139,7 +140,7 @@ public async Task StartConnectionRestartWithSameConnectionTest() { // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); // Act var id1 = panel.StartConnection(mockConnection.Object); @@ -157,7 +158,7 @@ public async Task StopConnectionTest() { // Arrange var mockConnection = new MockConnection(); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); Guid id = panel.StartConnection(mockConnection.Object); panel.AddDevice(id, 0, true, false); @@ -178,7 +179,7 @@ public class IdRequestCommandTest [Test] public async Task ReturnsValidReportTest() { - var panel = new ControlPanel(GlobalSetup.CreateLogger()); + var panel = new ControlPanel(NullLoggerFactory.Instance); var idReportCommand = new IdReport(); var deviceIdentificationReply = new DeviceIdentification([0x5C, 0x26, 0x23], 0x19, 0x02, 719912960, 0x03, 0x00, 0x00); @@ -203,7 +204,7 @@ public async Task ReturnsValidReportTest() [Test] public void ThrowOnNakReplyTest() { - var panel = new ControlPanel(GlobalSetup.CreateLogger()); + var panel = new ControlPanel(NullLoggerFactory.Instance); var idReportCommand = new IdReport(); var nakReply = new Nak(ErrorCode.UnknownCommandCode); diff --git a/src/OSDP.Net.Tests/Global.cs b/src/OSDP.Net.Tests/Global.cs deleted file mode 100644 index 29f4cd19..00000000 --- a/src/OSDP.Net.Tests/Global.cs +++ /dev/null @@ -1,23 +0,0 @@ - -using Microsoft.Extensions.Logging; -using NUnit.Framework; - -namespace OSDP.Net.Tests -{ - [SetUpFixture] - class GlobalSetup - { - public static ILogger CreateLogger() => LoggerFactory.CreateLogger(); - - [OneTimeSetUp] - public void BeforeAnyTests() - { - LoggerFactory.AddLog4Net(); - - // Is next line needed? How does log4net know to write log out to console?? Yet it seems to - //BasicConfigurator.Configure(); - } - - private static readonly LoggerFactory LoggerFactory = new(); - } -} \ No newline at end of file diff --git a/src/OSDP.Net.Tests/IntegrationTests/PeripheryDeviceTest.cs b/src/OSDP.Net.Tests/IntegrationTests/PeripheryDeviceTest.cs index 81526e04..b6d687d5 100644 --- a/src/OSDP.Net.Tests/IntegrationTests/PeripheryDeviceTest.cs +++ b/src/OSDP.Net.Tests/IntegrationTests/PeripheryDeviceTest.cs @@ -11,7 +11,6 @@ namespace OSDP.Net.Tests.IntegrationTests; - // // NOTE: Majority of naming/structure in this file is very much a work-in-progress // and will be updated if we continue to build out a set of integration tests diff --git a/src/OSDP.Net.Tests/OSDP.Net.Tests.csproj b/src/OSDP.Net.Tests/OSDP.Net.Tests.csproj index ac94246c..8f6d042b 100644 --- a/src/OSDP.Net.Tests/OSDP.Net.Tests.csproj +++ b/src/OSDP.Net.Tests/OSDP.Net.Tests.csproj @@ -10,9 +10,9 @@ - - - + + + diff --git a/src/OSDP.Net/Bus.cs b/src/OSDP.Net/Bus.cs index cc1460b4..ee69258a 100644 --- a/src/OSDP.Net/Bus.cs +++ b/src/OSDP.Net/Bus.cs @@ -13,6 +13,7 @@ using OSDP.Net.Model.CommandData; using OSDP.Net.Model.ReplyData; using OSDP.Net.Tracing; + #if NETSTANDARD2_0 using OSDP.Net.Utilities; #endif diff --git a/src/OSDP.Net/ControlPanel.cs b/src/OSDP.Net/ControlPanel.cs index 5d937d2d..03c3c8ad 100644 --- a/src/OSDP.Net/ControlPanel.cs +++ b/src/OSDP.Net/ControlPanel.cs @@ -6,6 +6,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using OSDP.Net.Connections; using OSDP.Net.Messages; using OSDP.Net.Model.CommandData; @@ -37,11 +38,32 @@ public class ControlPanel /// Initializes a new instance of the class. /// The logger definition used for logging. + [Obsolete("Sending a ILogger is deprecated, please send ILoggerFactory instead.")] public ControlPanel(ILogger logger = null) : this(null, logger) { } + /// Initializes a new instance of the class. + /// The logger factory used to create logging facilities. + public ControlPanel(ILoggerFactory loggerFactory = null) : this(null, loggerFactory) { } + internal ControlPanel(IDeviceProxyFactory deviceProxyFactory, ILogger logger = null) { - _logger = logger; + _logger = logger ?? NullLoggerFactory.Instance.CreateLogger(); + _deviceProxyFactory = deviceProxyFactory ?? new DeviceProxyFactory(); + + Task.Factory.StartNew(() => + { + foreach (var reply in _replies.GetConsumingEnumerable()) + { + OnReplyReceived(reply); + } + }, TaskCreationOptions.LongRunning); + } + + internal ControlPanel(IDeviceProxyFactory deviceProxyFactory, ILoggerFactory loggerFactory = null) + { + _logger = loggerFactory != null + ? loggerFactory.CreateLogger() + : NullLoggerFactory.Instance.CreateLogger(); _deviceProxyFactory = deviceProxyFactory ?? new DeviceProxyFactory(); Task.Factory.StartNew(() => diff --git a/src/OSDP.Net/OSDP.Net.csproj b/src/OSDP.Net/OSDP.Net.csproj index f7bc37ff..b25726f2 100644 --- a/src/OSDP.Net/OSDP.Net.csproj +++ b/src/OSDP.Net/OSDP.Net.csproj @@ -25,14 +25,17 @@ - + - + - - + + + + + diff --git a/src/samples/CardReader/CardReader.csproj b/src/samples/CardReader/CardReader.csproj index a69da946..2c470e3d 100644 --- a/src/samples/CardReader/CardReader.csproj +++ b/src/samples/CardReader/CardReader.csproj @@ -14,9 +14,9 @@ - - - + + + diff --git a/src/samples/PivDataReader/PivDataReader.csproj b/src/samples/PivDataReader/PivDataReader.csproj index ab3d501d..8e089df4 100644 --- a/src/samples/PivDataReader/PivDataReader.csproj +++ b/src/samples/PivDataReader/PivDataReader.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/src/samples/PivDataReader/Program.cs b/src/samples/PivDataReader/Program.cs index 31abd389..88f742c5 100644 --- a/src/samples/PivDataReader/Program.cs +++ b/src/samples/PivDataReader/Program.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging.Abstractions; using OSDP.Net; using OSDP.Net.Connections; using OSDP.Net.Model.CommandData; @@ -30,7 +31,7 @@ private static async Task Main() byte elementId = Convert.FromHexString(pivDataSection["ElementId"]!)[0]; ushort offset = ushort.Parse(pivDataSection["Offset"]!); - var panel = new ControlPanel(); + var panel = new ControlPanel(NullLoggerFactory.Instance); panel.ConnectionStatusChanged += async (_, eventArgs) => { Console.WriteLine();