// Copyright © WireMock.Net
using System;
using JetBrains.Annotations;
using WireMock.Matchers;
using WireMock.Settings;
using WireMock.Types;
namespace WireMock.WebSockets;
///
/// WebSocket Response Builder interface
///
public interface IWebSocketBuilder
{
///
/// Accept the WebSocket with a specific protocol
///
[PublicAPI]
IWebSocketBuilder WithAcceptProtocol(string protocol);
///
/// Echo all received messages back to client
///
[PublicAPI]
IWebSocketBuilder WithEcho();
///
/// Configure and send a single message in response to any received message
///
/// Action to configure the message
[PublicAPI]
IWebSocketBuilder SendMessage(Action configure);
///
/// Configure and send multiple messages in response to any received message
///
/// Action to configure the messages
[PublicAPI]
IWebSocketBuilder SendMessages(Action configure);
///
/// Configure message sending based on message content matching
///
/// String to match in message text
[PublicAPI]
IWebSocketMessageConditionBuilder WhenMessage(string wildcardPattern);
///
/// Configure message sending based on message content matching
///
/// Bytes to match in message
[PublicAPI]
IWebSocketMessageConditionBuilder WhenMessage(byte[] exactPattern);
///
/// Configure message sending based on IMatcher
///
/// IMatcher to match the message
[PublicAPI]
IWebSocketMessageConditionBuilder WhenMessage(IMatcher matcher);
///
/// Handle incoming WebSocket messages
///
[PublicAPI]
IWebSocketBuilder WithMessageHandler(Func handler);
///
/// Enable broadcast mode for this mapping
///
[PublicAPI]
IWebSocketBuilder WithBroadcast();
///
/// Proxy to another WebSocket server
///
[PublicAPI]
IWebSocketBuilder WithProxy(ProxyAndRecordSettings settings);
///
/// Set close timeout (default: 10 minutes)
///
[PublicAPI]
IWebSocketBuilder WithCloseTimeout(TimeSpan timeout);
///
/// Set maximum message size in bytes (default: 1 MB)
///
[PublicAPI]
IWebSocketBuilder WithMaxMessageSize(int sizeInBytes);
///
/// Set receive buffer size (default: 4096 bytes)
///
[PublicAPI]
IWebSocketBuilder WithReceiveBufferSize(int sizeInBytes);
///
/// Set keep-alive interval (default: 30 seconds)
///
[PublicAPI]
IWebSocketBuilder WithKeepAliveInterval(TimeSpan interval);
}