43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
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<byte>(buffer), CancellationToken.None);
|
|
while (!result.CloseStatus.HasValue)
|
|
{
|
|
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);
|
|
|
|
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
|
|
}
|
|
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
|
|
}
|
|
|
|
}
|
|
}
|