mirror of
https://github.com/yawaflua/WebSockets.git
synced 2026-02-04 05:54:12 +02:00
Adds example of using preConnectionHandler, create OnConnectionHandler(preConnectionHandler), use WebSocketOptions for provides data
This commit is contained in:
@@ -11,18 +11,24 @@ internal class WebSocket : IWebSocket
|
||||
private readonly string? _message;
|
||||
|
||||
public WebSocketState State => _webSocket.State;
|
||||
public IWebSocketManager WebSocketManager { get; }
|
||||
public WebSocketCloseStatus? CloseStatus => _webSocket.CloseStatus;
|
||||
public string? SubProtocol => _webSocket.SubProtocol;
|
||||
public string? CloseStatusDescription => _webSocket.CloseStatusDescription;
|
||||
public string? Message => _message;
|
||||
public WebSocketMessageType? MessageType => _webSocketReceiveResult?.MessageType;
|
||||
public IWebSocketClient Client { get; }
|
||||
internal WebSocket(System.Net.WebSockets.WebSocket webSocket, WebSocketReceiveResult? webSocketReceiveResult, string? message, IWebSocketClient client)
|
||||
internal WebSocket(System.Net.WebSockets.WebSocket webSocket,
|
||||
IWebSocketClient client,
|
||||
IWebSocketManager webSocketManager,
|
||||
string? message = null,
|
||||
WebSocketReceiveResult? webSocketReceiveResult = null)
|
||||
{
|
||||
_webSocket = webSocket;
|
||||
_webSocketReceiveResult = webSocketReceiveResult;
|
||||
_message = message;
|
||||
Client = client;
|
||||
WebSocketManager = webSocketManager;
|
||||
}
|
||||
|
||||
public async Task SendAsync(string m, WebSocketMessageType messageType = WebSocketMessageType.Text, CancellationToken cts = default)
|
||||
|
||||
@@ -65,7 +65,7 @@ public class WebSocketRouter
|
||||
|
||||
var parameters = func.GetParameters();
|
||||
if (parameters.Length != 2 ||
|
||||
parameters[0].ParameterType != typeof(WebSocket) ||
|
||||
parameters[0].ParameterType != typeof(IWebSocket) ||
|
||||
parameters[1].ParameterType != typeof(HttpContext) ||
|
||||
func.ReturnType != typeof(Task))
|
||||
{
|
||||
@@ -147,13 +147,14 @@ public class WebSocketRouter
|
||||
{
|
||||
try
|
||||
{
|
||||
var webSocketManager = new WebSocketManager();
|
||||
var client = new WebSocketClient(context, webSocket, path);
|
||||
Clients.Add(client);
|
||||
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
if (_webSocketConfig?.OnOpenHandler != null)
|
||||
await _webSocketConfig.OnOpenHandler((webSocket as IWebSocket)!, context);
|
||||
await _webSocketConfig.OnOpenHandler(new WebSocket(webSocket, client, webSocketManager)!, context);
|
||||
}, cts);
|
||||
|
||||
var buffer = new byte[1024 * 4];
|
||||
@@ -164,13 +165,16 @@ public class WebSocketRouter
|
||||
await handler(
|
||||
new WebSocket(
|
||||
webSocket,
|
||||
result,
|
||||
client,
|
||||
webSocketManager,
|
||||
Encoding.UTF8.GetString(buffer, 0, result.Count),
|
||||
client),
|
||||
context);
|
||||
result), context);
|
||||
else
|
||||
Clients.Remove(client);
|
||||
}
|
||||
|
||||
if (Clients.Any(k => k.Id == client.Id))
|
||||
Clients.Remove(client);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user