diff --git a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs
new file mode 100644
index 00000000..6a7bcd0a
--- /dev/null
+++ b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs
@@ -0,0 +1,17 @@
+// Copyright © WireMock.Net
+
+using System.Net;
+
+namespace WireMock.ResponseProviders;
+
+///
+/// Special response marker to indicate WebSocket has been handled
+///
+internal class WebSocketHandledResponse : ResponseMessage
+{
+ public WebSocketHandledResponse()
+ {
+ // 101 Switching Protocols
+ StatusCode = (int)HttpStatusCode.SwitchingProtocols;
+ }
+}
\ No newline at end of file
diff --git a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs
index ef7593c8..18b1d2ec 100644
--- a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs
+++ b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs
@@ -12,14 +12,9 @@ using WireMock.WebSockets;
namespace WireMock.ResponseProviders;
-internal class WebSocketResponseProvider : IResponseProvider
+internal class WebSocketResponseProvider(WebSocketBuilder builder) : IResponseProvider
{
- private readonly WebSocketBuilder _builder;
-
- public WebSocketResponseProvider(WebSocketBuilder builder)
- {
- _builder = Guard.NotNull(builder);
- }
+ private readonly WebSocketBuilder _builder = Guard.NotNull(builder);
public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(
IMapping mapping,
@@ -127,7 +122,7 @@ internal class WebSocketResponseProvider : IResponseProvider
}
}
- private async Task HandleEchoAsync(WireMockWebSocketContext context)
+ private static async Task HandleEchoAsync(WireMockWebSocketContext context)
{
var bufferSize = context.Builder.MaxMessageSize ?? WebSocketConstants.DefaultReceiveBufferSize;
var buffer = new byte[bufferSize];
@@ -170,7 +165,7 @@ internal class WebSocketResponseProvider : IResponseProvider
}
}
- private async Task HandleCustomAsync(
+ private static async Task HandleCustomAsync(
WireMockWebSocketContext context,
Func handler)
{
@@ -212,7 +207,7 @@ internal class WebSocketResponseProvider : IResponseProvider
}
}
- private async Task HandleProxyAsync(WireMockWebSocketContext context, ProxyAndRecordSettings settings)
+ private static async Task HandleProxyAsync(WireMockWebSocketContext context, ProxyAndRecordSettings settings)
{
using var clientWebSocket = new ClientWebSocket();
@@ -236,7 +231,7 @@ internal class WebSocketResponseProvider : IResponseProvider
}
}
- private async Task ForwardMessagesAsync(WebSocket source, WebSocket destination)
+ private static async Task ForwardMessagesAsync(WebSocket source, WebSocket destination)
{
var buffer = new byte[WebSocketConstants.ProxyForwardBufferSize];
@@ -263,7 +258,7 @@ internal class WebSocketResponseProvider : IResponseProvider
}
}
- private async Task WaitForCloseAsync(WireMockWebSocketContext context)
+ private static async Task WaitForCloseAsync(WireMockWebSocketContext context)
{
var buffer = new byte[WebSocketConstants.MinimumBufferSize];
var timeout = context.Builder.CloseTimeout ?? TimeSpan.FromMinutes(WebSocketConstants.DefaultCloseTimeoutMinutes);
@@ -315,16 +310,4 @@ internal class WebSocketResponseProvider : IResponseProvider
return message;
}
-}
-
-///
-/// Special response marker to indicate WebSocket has been handled
-///
-internal class WebSocketHandledResponse : ResponseMessage
-{
- public WebSocketHandledResponse()
- {
- // 101 Switching Protocols
- StatusCode = (int)HttpStatusCode.SwitchingProtocols;
- }
}
\ No newline at end of file
diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs
index 495bcbad..ca029b2c 100644
--- a/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs
+++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs
@@ -1,9 +1,6 @@
// Copyright © WireMock.Net
-using System;
using System.Net.WebSockets;
-using System.Threading;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace WireMock.WebSockets;
diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs
index d212aef3..ee0b6fa5 100644
--- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs
+++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs
@@ -49,4 +49,4 @@ public interface IWebSocketMessageBuilder
///
[PublicAPI]
IWebSocketMessageBuilder AndClose();
-}
+}
\ No newline at end of file
diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs
index e06bc17d..ac7bf008 100644
--- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs
+++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs
@@ -22,4 +22,4 @@ public interface IWebSocketMessageConditionBuilder
/// Action to configure the messages
[PublicAPI]
IWebSocketBuilder SendMessages(Action configure);
-}
+}
\ No newline at end of file
diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs
index b3435d30..5aff8e33 100644
--- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs
+++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs
@@ -15,4 +15,4 @@ public interface IWebSocketMessagesBuilder
/// Action to configure the message
[PublicAPI]
IWebSocketMessagesBuilder AddMessage(Action configure);
-}
+}
\ No newline at end of file
diff --git a/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs b/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs
index 9dd0da98..a4d29ece 100644
--- a/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs
+++ b/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs
@@ -1,6 +1,5 @@
// Copyright © WireMock.Net
-using System;
using System.Net.WebSockets;
namespace WireMock.WebSockets;
diff --git a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs
index 045c7907..462166f8 100644
--- a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs
+++ b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs
@@ -570,6 +570,7 @@ public class WebSocketIntegrationTests(ITestOutputHelper output)
)
.RespondWith(Response.Create()
.WithWebSocket(ws => ws
+ .WithCloseTimeout(TimeSpan.FromSeconds(3))
.WhenMessage("/help").SendMessage(m => m.WithText("Available commands: /help, /time, /echo "))
.WhenMessage("/time").SendMessage(m => m.WithText($"Server time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC"))
.WhenMessage("/echo ").SendMessage(m => m.WithText("echo response"))