< Summary

Information
Class: NostrSure.Infrastructure.Client.Implementation.ConnectionStateManager
Assembly: NostrSure.Infrastructure
File(s): /home/runner/work/NostrSure/NostrSure/NostrSure.Infrastructure/Client/Implementation/ConnectionStateManager.cs
Line coverage
100%
Covered lines: 24
Uncovered lines: 0
Coverable lines: 24
Total lines: 55
Line coverage: 100%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_CurrentState()100%11100%
get_IsConnected()100%11100%
UpdateState(...)83.33%66100%

File(s)

/home/runner/work/NostrSure/NostrSure/NostrSure.Infrastructure/Client/Implementation/ConnectionStateManager.cs

#LineLine coverage
 1using Microsoft.Extensions.Logging;
 2using NostrSure.Infrastructure.Client.Abstractions;
 3using System.Net.WebSockets;
 4
 5namespace NostrSure.Infrastructure.Client.Implementation;
 6
 7/// <summary>
 8/// Manages WebSocket connection state tracking and notifications
 9/// </summary>
 10public sealed class ConnectionStateManager : IConnectionStateManager
 11{
 12    private readonly ILogger<ConnectionStateManager>? _logger;
 1713    private WebSocketState _currentState = WebSocketState.None;
 1714    private readonly object _stateLock = new();
 15
 1716    public ConnectionStateManager(ILogger<ConnectionStateManager>? logger = null)
 1717    {
 1718        _logger = logger;
 1719    }
 20
 21    public WebSocketState CurrentState
 22    {
 23        get
 1324        {
 1325            lock (_stateLock)
 1326            {
 1327                return _currentState;
 28            }
 1329        }
 30    }
 31
 832    public bool IsConnected => CurrentState == WebSocketState.Open;
 33
 34    public event EventHandler<WebSocketState>? StateChanged;
 35
 36    public void UpdateState(WebSocketState newState)
 1137    {
 38        WebSocketState previousState;
 39
 1140        lock (_stateLock)
 1141        {
 1142            previousState = _currentState;
 1143            if (previousState == newState)
 144                return; // No change, don't fire event
 45
 1046            _currentState = newState;
 1047        }
 48
 1049        _logger?.LogDebug("WebSocket state changed from {PreviousState} to {NewState}",
 1050                         previousState, newState);
 51
 52        // Fire event outside the lock to prevent deadlocks
 1053        StateChanged?.Invoke(this, newState);
 1154    }
 55}