diff --git a/src/WebSocket.Rx.Tests/ClientConnectedTests.cs b/src/WebSocket.Rx.Tests/ClientConnectedTests.cs index 26a6e81..6df762f 100644 --- a/src/WebSocket.Rx.Tests/ClientConnectedTests.cs +++ b/src/WebSocket.Rx.Tests/ClientConnectedTests.cs @@ -14,7 +14,7 @@ public void Constructor_ShouldSetName() // Act var connected = - new ClientConnected(new Metadata(id, IPAddress.Any, 0), new Connected(ConnectReason.Initial)); + new ClientConnected(new Metadata(id, IPAddress.Any, 0), new Connected(ConnectReason.Initialized)); // Assert Assert.Equal(id, connected.Metadata.Id); @@ -24,7 +24,7 @@ public void Constructor_ShouldSetName() public void Equality_WithSameName_ShouldBeEqual() { // Arrange - var @event = new Connected(ConnectReason.Initial); + var @event = new Connected(ConnectReason.Initialized); var metadata = new Metadata(Guid.Empty, IPAddress.Any, 0); var connected1 = new ClientConnected(metadata, @event); var connected2 = new ClientConnected(metadata, @event); @@ -38,9 +38,9 @@ public void Equality_WithDifferentName_ShouldNotBeEqual() { // Arrange var connected1 = new ClientConnected(new Metadata(Guid.Empty, IPAddress.Any, 0), - new Connected(ConnectReason.Initial)); + new Connected(ConnectReason.Initialized)); var connected2 = new ClientConnected(new Metadata(Guid.Empty, IPAddress.Any, 1), - new Connected(ConnectReason.Initial)); + new Connected(ConnectReason.Initialized)); // Act & Assert Assert.NotEqual(connected1, connected2); diff --git a/src/WebSocket.Rx.Tests/ConnectedTests.cs b/src/WebSocket.Rx.Tests/ConnectedTests.cs index 5f9fd83..389b1eb 100644 --- a/src/WebSocket.Rx.Tests/ConnectedTests.cs +++ b/src/WebSocket.Rx.Tests/ConnectedTests.cs @@ -8,7 +8,7 @@ public class ConnectedTests public void Equality_WithSameValues_ShouldBeEqual() { // Arrange - const ConnectReason @enum = ConnectReason.Initial; + const ConnectReason @enum = ConnectReason.Initialized; var connected1 = new Connected(@enum); var connected2 = new Connected(@enum); diff --git a/src/WebSocket.Rx.Tests/DisconnectedTests.cs b/src/WebSocket.Rx.Tests/DisconnectedTests.cs index 6f84118..cd60696 100644 --- a/src/WebSocket.Rx.Tests/DisconnectedTests.cs +++ b/src/WebSocket.Rx.Tests/DisconnectedTests.cs @@ -155,7 +155,7 @@ public void Records_WithSameValues_AreEqual() [Fact] public void WithExpression_CopiesValues() { - var original = new Disconnected(DisconnectReason.Shutdown); + var original = new Disconnected(DisconnectReason.ClientInitiated); original.CancelClosing(); original.CancelReconnection(); @@ -170,8 +170,8 @@ public void WithExpression_CopiesValues() [Fact] public void Flags_DoAffect_RecordEquality() { - var a = new Disconnected(DisconnectReason.Shutdown); - var b = new Disconnected(DisconnectReason.Shutdown); + var a = new Disconnected(DisconnectReason.ClientInitiated); + var b = new Disconnected(DisconnectReason.ClientInitiated); a.CancelClosing(); a.CancelReconnection(); diff --git a/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.LifecycleTests.cs b/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.LifecycleTests.cs index 9c8e1fb..ff44424 100644 --- a/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.LifecycleTests.cs +++ b/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.LifecycleTests.cs @@ -100,7 +100,7 @@ public async Task Stop_WhenRunning_ShouldDisconnect() var disconnected = new TaskCompletionSource(); var disconnectedTask = disconnected.Task; Client.DisconnectionHappened - .Where(x => x.Reason is DisconnectReason.Shutdown) + .Where(x => x.Reason is DisconnectReason.ClientInitiated) .Take(1) .Subscribe(x => disconnected.SetResult(true)); diff --git a/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.ReconnectionTests.cs b/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.ReconnectionTests.cs index 05789a5..564f10f 100644 --- a/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.ReconnectionTests.cs +++ b/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.ReconnectionTests.cs @@ -15,7 +15,7 @@ public async Task Reconnect_WhenStarted_ShouldReconnect() var reconnected = false; Client.ConnectionHappened - .Where(c => c.Reason == ConnectReason.Reconnect) + .Where(c => c.Reason == ConnectReason.Reconnected) .Subscribe(_ => reconnected = true); // Act @@ -63,7 +63,7 @@ public async Task ReconnectOrFail_WhenStarted_ShouldReconnect() var reconnected = false; Client.ConnectionHappened - .Where(c => c.Reason == ConnectReason.Reconnect) + .Where(c => c.Reason == ConnectReason.Reconnected) .Subscribe(_ => reconnected = true); // Act @@ -84,7 +84,7 @@ public async Task AutoReconnect_OnConnectionLost_ShouldReconnect() var reconnected = false; Client.ConnectionHappened - .Where(c => c.Reason == ConnectReason.Reconnect) + .Where(c => c.Reason == ConnectReason.Reconnected) .Subscribe(_ => reconnected = true); await Client.StartOrFailAsync(TestContext.Current.CancellationToken); @@ -107,7 +107,7 @@ public async Task AutoReconnect_WhenDisabled_ShouldNotReconnect() var reconnectCount = 0; Client.ConnectionHappened - .Where(c => c.Reason == ConnectReason.Reconnect) + .Where(c => c.Reason == ConnectReason.Reconnected) .Subscribe(_ => reconnectCount++); await Client.StartOrFailAsync(TestContext.Current.CancellationToken); diff --git a/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.StressTests.cs b/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.StressTests.cs index 13c802a..37b610a 100644 --- a/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.StressTests.cs +++ b/src/WebSocket.Rx.Tests/ReactiveWebSocketClient.StressTests.cs @@ -58,7 +58,7 @@ public async Task InactivityTimeout_OnConnectionLost_ShouldReconnectQuickly() var reconnected = new TaskCompletionSource(); var reconnectTask = reconnected.Task; Client.ConnectionHappened - .Where(c => c.Reason == ConnectReason.Reconnect) + .Where(c => c.Reason == ConnectReason.Reconnected) .Take(1) .Subscribe(_ => reconnected.TrySetResult(true)); diff --git a/src/WebSocket.Rx/ConnectReason.cs b/src/WebSocket.Rx/ConnectReason.cs index a4086b1..2ccaf57 100644 --- a/src/WebSocket.Rx/ConnectReason.cs +++ b/src/WebSocket.Rx/ConnectReason.cs @@ -3,6 +3,6 @@ namespace WebSocket.Rx; public enum ConnectReason { Undefined = 0, - Initial = 1, - Reconnect = 2 + Initialized = 1, + Reconnected = 2 } \ No newline at end of file diff --git a/src/WebSocket.Rx/DisconnectReason.cs b/src/WebSocket.Rx/DisconnectReason.cs index d960bd8..883481f 100644 --- a/src/WebSocket.Rx/DisconnectReason.cs +++ b/src/WebSocket.Rx/DisconnectReason.cs @@ -3,9 +3,9 @@ namespace WebSocket.Rx; public enum DisconnectReason { Undefined = 0, - ConnectionLost = 1, - Timeout = 2, - ClientInitiated = 4, - ServerInitiated = 5, - Shutdown = 6 + ClientInitiated = 1, + ServerInitiated = 2, + TimedOut = 3, + Dropped = 4, + Closed = 5 } \ No newline at end of file diff --git a/src/WebSocket.Rx/ErrorSource.cs b/src/WebSocket.Rx/ErrorSource.cs index 9a5b0d8..0e9508d 100644 --- a/src/WebSocket.Rx/ErrorSource.cs +++ b/src/WebSocket.Rx/ErrorSource.cs @@ -9,5 +9,5 @@ public enum ErrorSource Send, SendLoop, ReceiveLoop, - Dispose, + Dispose } \ No newline at end of file diff --git a/src/WebSocket.Rx/ReactiveWebSocketClient.cs b/src/WebSocket.Rx/ReactiveWebSocketClient.cs index ca915ef..9c99763 100644 --- a/src/WebSocket.Rx/ReactiveWebSocketClient.cs +++ b/src/WebSocket.Rx/ReactiveWebSocketClient.cs @@ -83,11 +83,12 @@ public async Task StartOrFailAsync(CancellationToken cancellationToken = default return; } - await ConnectInternalAsync(ConnectReason.Initial, true, cancellationToken); + await ConnectInternalAsync(ConnectReason.Initialized, true, cancellationToken); } } - public async Task StopAsync(WebSocketCloseStatus status, string statusDescription, CancellationToken cancellationToken = default) + public async Task StopAsync(WebSocketCloseStatus status, string statusDescription, + CancellationToken cancellationToken = default) { try { @@ -100,7 +101,8 @@ public async Task StopAsync(WebSocketCloseStatus status, string statusDesc } } - public async Task StopOrFailAsync(WebSocketCloseStatus status, string statusDescription, CancellationToken cancellationToken = default) + public async Task StopOrFailAsync(WebSocketCloseStatus status, string statusDescription, + CancellationToken cancellationToken = default) { using (await ConnectionLock.LockAsync(cancellationToken).ConfigureAwait(false)) { @@ -128,7 +130,7 @@ public async Task StopOrFailAsync(WebSocketCloseStatus status, string stat } } - DisconnectionHappenedSource.OnNext(new Disconnected(DisconnectReason.Shutdown)); + DisconnectionHappenedSource.OnNext(new Disconnected(DisconnectReason.ClientInitiated)); await CleanupAsync(); @@ -222,7 +224,7 @@ await Task.WhenAll( ReceiveLoopTask ?? Task.CompletedTask ); - await ConnectInternalAsync(ConnectReason.Reconnect, throwOnError, cancellationToken); + await ConnectInternalAsync(ConnectReason.Reconnected, throwOnError, cancellationToken); } catch (Exception ex) { @@ -417,15 +419,15 @@ await NativeClient var reason = ex.NativeErrorCode switch { // KeepAlive - 10060 or 110 => DisconnectReason.Timeout, + 10060 or 110 => DisconnectReason.TimedOut, // Connection lost - 10054 or 104 => DisconnectReason.ConnectionLost, + 10054 or 104 => DisconnectReason.Dropped, // Aborted/Cancelled 10053 or 995 => DisconnectReason.ClientInitiated, - _ => DisconnectReason.ConnectionLost + _ => DisconnectReason.Undefined }; var @event = new Disconnected(reason, Exception: ex); @@ -439,7 +441,7 @@ await NativeClient if (!IsDisposed && IsReconnectionEnabled) { - var @event = new Disconnected(DisconnectReason.ConnectionLost); + var @event = new Disconnected(DisconnectReason.Closed); DisconnectionHappenedSource.OnNext(@event); if (@event.IsReconnectionCanceled) return; _ = ScheduleReconnectAsync().ConfigureAwait(false); diff --git a/src/WebSocket.Rx/ReactiveWebSocketServer.cs b/src/WebSocket.Rx/ReactiveWebSocketServer.cs index 40b073b..d95164a 100644 --- a/src/WebSocket.Rx/ReactiveWebSocketServer.cs +++ b/src/WebSocket.Rx/ReactiveWebSocketServer.cs @@ -99,7 +99,8 @@ public async Task StartAsync(CancellationToken cancellationToken = default) _serverLoopTask = Task.Run(() => ServerLoopAsync(_mainCts.Token), CancellationToken.None); } - public async Task StopAsync(WebSocketCloseStatus status, string statusDescription, CancellationToken cancellationToken = default) + public async Task StopAsync(WebSocketCloseStatus status, string statusDescription, + CancellationToken cancellationToken = default) { Dictionary clientsToStop; using (await _serverLock.LockAsync(cancellationToken).ConfigureAwait(false)) @@ -233,7 +234,7 @@ private async Task HandleWebSocketAsync(HttpListenerContext context, Metadata me lock (_clientConnectedSource) { - _clientConnectedSource.OnNext(new ClientConnected(metadata, new Connected(ConnectReason.Initial))); + _clientConnectedSource.OnNext(new ClientConnected(metadata, new Connected(ConnectReason.Initialized))); } } catch (Exception) @@ -675,15 +676,15 @@ await NativeServerSocket var reason = ex.NativeErrorCode switch { // KeepAlive - 10060 or 110 => DisconnectReason.Timeout, + 10060 or 110 => DisconnectReason.Undefined, // Connection lost - 10054 or 104 => DisconnectReason.ConnectionLost, + 10054 or 104 => DisconnectReason.Undefined, // Aborted/Cancelled 10053 or 995 => DisconnectReason.ClientInitiated, - _ => DisconnectReason.ConnectionLost + _ => DisconnectReason.Undefined }; DisconnectionHappenedSource.OnNext(new Disconnected(reason, Exception: ex)); } @@ -701,7 +702,8 @@ await NativeServerSocket } } - public new async Task StopAsync(WebSocketCloseStatus status, string statusDescription, CancellationToken cancellationToken = default) + public new async Task StopAsync(WebSocketCloseStatus status, string statusDescription, + CancellationToken cancellationToken = default) { if (!IsStarted) { @@ -722,7 +724,7 @@ await NativeServerSocket } } - DisconnectionHappenedSource.OnNext(new Disconnected(DisconnectReason.Shutdown)); + DisconnectionHappenedSource.OnNext(new Disconnected(DisconnectReason.ServerInitiated)); IsStarted = false; IsRunning = false;