From bbab9a21f01ea053a3614da87016046dd25107e4 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Mon, 14 Nov 2016 12:17:24 +0100 Subject: [PATCH] fixes latest commit --- Yavsc/Startup/Startup.WebSockets.cs | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Yavsc/Startup/Startup.WebSockets.cs diff --git a/Yavsc/Startup/Startup.WebSockets.cs b/Yavsc/Startup/Startup.WebSockets.cs new file mode 100644 index 00000000..fa2836e5 --- /dev/null +++ b/Yavsc/Startup/Startup.WebSockets.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Concurrent; +using System.Net.WebSockets; +using System.Threading; +using Microsoft.AspNet.Builder; +using Microsoft.AspNet.Hosting; + +namespace Yavsc +{ + public partial class Startup + { + public void ConfigureWebSocketsApp(IApplicationBuilder app, + SiteSettings siteSettings, IHostingEnvironment env) + { + app.UseWebSockets(); + + app.UseSignalR("/api/signalr"); + + var _sockets = new ConcurrentBag(); + + app.Use( + async (http, next) => + { + if (http.WebSockets.IsWebSocketRequest) + { + WebSocket webSocket = null; + if (!_sockets.TryPeek(out webSocket)) + { + webSocket = await http.WebSockets.AcceptWebSocketAsync(); + _sockets.Add(webSocket); + } + using (webSocket) + { + if (webSocket != null && webSocket.State == WebSocketState.Open) + { + // TODO: Handle the socket here. + byte[] buffer = new byte[1024]; + WebSocketReceiveResult received = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + while (received.MessageType != WebSocketMessageType.Close) + { + Console.WriteLine($"Echoing {received.Count} bytes received in a {received.MessageType} message; Fin={received.EndOfMessage}"); + // Echo anything we receive + await webSocket.SendAsync(new ArraySegment(buffer, 0, received.Count), received.MessageType, received.EndOfMessage, CancellationToken.None); + + received = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + } + await webSocket.CloseAsync(received.CloseStatus.Value, received.CloseStatusDescription, CancellationToken.None); + + } + + } + } + else + { + // Nothing to do here, pass downstream. + await next(); + } + } + ); + } + } +} \ No newline at end of file