mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-25 17:58:33 +02:00
.
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
// Copyright © WireMock.Net
|
||||
|
||||
using System.Net;
|
||||
|
||||
namespace WireMock.ResponseProviders;
|
||||
|
||||
/// <summary>
|
||||
/// Special response marker to indicate WebSocket has been handled
|
||||
/// </summary>
|
||||
internal class WebSocketHandledResponse : ResponseMessage
|
||||
{
|
||||
public WebSocketHandledResponse()
|
||||
{
|
||||
// 101 Switching Protocols
|
||||
StatusCode = (int)HttpStatusCode.SwitchingProtocols;
|
||||
}
|
||||
}
|
||||
@@ -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<WebSocketMessage, IWebSocketContext, Task> 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);
|
||||
@@ -316,15 +311,3 @@ internal class WebSocketResponseProvider : IResponseProvider
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Special response marker to indicate WebSocket has been handled
|
||||
/// </summary>
|
||||
internal class WebSocketHandledResponse : ResponseMessage
|
||||
{
|
||||
public WebSocketHandledResponse()
|
||||
{
|
||||
// 101 Switching Protocols
|
||||
StatusCode = (int)HttpStatusCode.SwitchingProtocols;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// Copyright © WireMock.Net
|
||||
|
||||
using System;
|
||||
using System.Net.WebSockets;
|
||||
|
||||
namespace WireMock.WebSockets;
|
||||
|
||||
@@ -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 <text>"))
|
||||
.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"))
|
||||
|
||||
Reference in New Issue
Block a user