using System; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Http; using Microsoft.AspNet.WebSockets.Server; namespace Yavsc { public partial class Startup { public void ConfigureWebSocketsApp(IApplicationBuilder app, SiteSettings siteSettings, IHostingEnvironment env) { var webSocketOptions = new WebSocketOptions() { KeepAliveInterval = TimeSpan.FromSeconds(30), ReceiveBufferSize = Constants.WebSocketsMaxBufLen+4*sizeof(int), ReplaceFeature = true }; app.UseWebSockets(webSocketOptions); app.UseSignalR(PathString.FromUriComponent(Constants.SignalRPath)); } private async Task Echo(HttpContext context, WebSocket webSocket) { var buffer = new byte[1024 * 4]; WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); while (!result.CloseStatus.HasValue) { await webSocket.SendAsync(new ArraySegment(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None); result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); } await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); } } }