using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WebDesktopBackend.Extentions { public static class WebSocketExtentions { public static async Task SendMessage(this WebSocket socket, string message, Encoding encoding = null) { encoding ??= Encoding.Default; await socket.SendAsync(new ArraySegment(encoding.GetBytes(message)), WebSocketMessageType.Text, true, CancellationToken.None); } public static async Task RecieveMessage(this WebSocket socket, Encoding encoding = null) { encoding ??= Encoding.Default; byte[] buffer = new byte[1024 * 4]; var result = await socket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); return encoding.GetString(new ArraySegment(buffer, 0, result.Count)); } public static async Task ConnectAsync(this ClientWebSocket socket, Uri endpoint) { await socket.ConnectAsync(endpoint, CancellationToken.None); return socket; } public static CancellationTokenSource AddMessageEventHandler(this WebSocket socket, Action handler) { var source = new CancellationTokenSource(); Task.Run(async () => { while (!socket.CloseStatus.HasValue) { string msg = await socket.RecieveMessage(); handler.Invoke(msg); } }, source.Token); return source; } } }