Created
October 9, 2020 08:55
-
-
Save bjoerntx/639784d95310a2c491533b4162f26e5a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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