Skip to content

Instantly share code, notes, and snippets.

@bjoerntx
Created October 9, 2020 08:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjoerntx/639784d95310a2c491533b4162f26e5a to your computer and use it in GitHub Desktop.
Save bjoerntx/639784d95310a2c491533b4162f26e5a to your computer and use it in GitHub Desktop.
public class CustomWebSocketMiddleware
{
private RequestDelegate m_next;
private IPAddress m_serviceAddress;
private int m_servicePort;
internal static readonly byte[] DefaultServiceAddress = { 127, 0, 0, 1 };
public CustomWebSocketMiddleware(RequestDelegate next)
{
m_next = next;
m_serviceAddress = new IPAddress(DefaultServiceAddress);
m_servicePort = 4277;
}
public CustomWebSocketMiddleware(RequestDelegate next,
IPAddress serviceAddress,
int servicePort = 4277)
{
m_next = next;
m_serviceAddress = serviceAddress;
m_servicePort = servicePort;
}
public CustomWebSocketMiddleware(RequestDelegate next,
string hostNameOrAddress,
int servicePort = 4277)
{
m_next = next;
IPAddress addr = Dns.GetHostAddresses(hostNameOrAddress).FirstOrDefault();
if (addr == null) throw new Exception($"Host '{hostNameOrAddress}' not found.");
m_serviceAddress = addr;
m_servicePort = servicePort;
}
public async Task Invoke(HttpContext context)
{
if (context.WebSockets.IsWebSocketRequest &&
context.WebSockets.WebSocketRequestedProtocols.Contains("TXTextControl.Web"))
{
var ws = new WebSocketHandler(m_serviceAddress, m_servicePort);
await ws.Invoke(context);
}
else if (m_next != null)
{
await m_next.Invoke(context);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment