Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion src/Daqifi.Core.Tests/Device/DaqifiDeviceWithTransportTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,29 @@ public void DaqifiDevice_WithMockTransport_ShouldConnectAndSendMessages()
Assert.Contains("SYSTem:SYSInfoPB?", streamContent);
}

[Fact]
[Fact]
public void DaqifiDevice_Disconnect_ShouldNotReportLostStatus()
{
// Arrange
using var transport = new MockStreamTransport();
using var device = new DaqifiDevice("Mock Device", transport);

device.Connect();
Assert.Equal(ConnectionStatus.Connected, device.Status);

var statusChanges = new List<ConnectionStatus>();
device.StatusChanged += (sender, args) => statusChanges.Add(args.Status);

// Act - Intentional disconnect
device.Disconnect();

// Assert - Should go straight to Disconnected, never Lost
Assert.DoesNotContain(ConnectionStatus.Lost, statusChanges);
Assert.Contains(ConnectionStatus.Disconnected, statusChanges);
Assert.Equal(ConnectionStatus.Disconnected, device.Status);
}

[Fact]
public void DaqifiDevice_TransportConnectionLost_ShouldUpdateStatus()
{
// Arrange
Expand Down
8 changes: 6 additions & 2 deletions src/Daqifi.Core/Device/DaqifiDevice.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public class DaqifiDevice : IDevice, IDisposable

private IProtocolHandler? _protocolHandler;
private bool _disposed;
private bool _isDisconnecting;
private bool _isInitialized;
private readonly List<IChannel> _channels = new();

Expand Down Expand Up @@ -198,6 +199,7 @@ public void Connect()
/// </summary>
public void Disconnect()
{
_isDisconnecting = true;
try
{
// Unsubscribe from message consumer events
Expand All @@ -218,6 +220,7 @@ public void Disconnect()
Status = ConnectionStatus.Disconnected;
State = DeviceState.Disconnected;
_isInitialized = false;
_isDisconnecting = false;
}
}

Expand Down Expand Up @@ -489,8 +492,9 @@ private void OnTransportStatusChanged(object? sender, TransportStatusEventArgs e
}
else
{
// Transport disconnected, update device status
if (Status == ConnectionStatus.Connected)
// Transport disconnected — only report Lost for unexpected drops,
// not during an intentional Disconnect() call
if (Status == ConnectionStatus.Connected && !_isDisconnecting)
{
Status = ConnectionStatus.Lost;
}
Expand Down
Loading