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();