aspnetcore/test/Microsoft.Extensions.WebSoc.../WebSocketPair.cs

50 lines
1.6 KiB
C#

using System;
using Channels;
namespace Microsoft.Extensions.WebSockets.Internal.Tests
{
internal class WebSocketPair : IDisposable
{
private ChannelFactory _factory;
private Channel _serverToClient;
private Channel _clientToServer;
public IWebSocketConnection ClientSocket { get; }
public IWebSocketConnection ServerSocket { get; }
public WebSocketPair(ChannelFactory factory, Channel serverToClient, Channel clientToServer, IWebSocketConnection clientSocket, IWebSocketConnection serverSocket)
{
_factory = factory;
_serverToClient = serverToClient;
_clientToServer = clientToServer;
ClientSocket = clientSocket;
ServerSocket = serverSocket;
}
public static WebSocketPair Create()
{
// Create channels
var factory = new ChannelFactory();
var serverToClient = factory.CreateChannel();
var clientToServer = factory.CreateChannel();
var serverSocket = new WebSocketConnection(clientToServer, serverToClient, masked: true);
var clientSocket = new WebSocketConnection(serverToClient, clientToServer, masked: false);
return new WebSocketPair(factory, serverToClient, clientToServer, clientSocket, serverSocket);
}
public void Dispose()
{
_factory.Dispose();
ServerSocket.Dispose();
ClientSocket.Dispose();
}
public void TerminateFromClient(Exception ex = null)
{
_clientToServer.CompleteWriter(ex);
}
}
}