using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace AvaloniaChatV2.Data; public class ClientWebSocketHandler: IDisposable { public delegate void ClientWebSocketReceiveMessage(string message); public event ClientWebSocketReceiveMessage? OnReceiveMessage; private readonly Uri _uri = new Uri("ws://217.114.2.102:8088/reviews"); private ClientWebSocket _webSocket = new (); public ClientWebSocketHandler() { _ = InitWebSocket(); } public async Task SendMessage(string message) { await _webSocket.SendAsync(new ArraySegment(Encoding.UTF8.GetBytes(message)), WebSocketMessageType.Text, true, CancellationToken.None); } private async Task InitWebSocket() { _webSocket = new ClientWebSocket(); await _webSocket.ConnectAsync(_uri, CancellationToken.None); while (_webSocket.State == WebSocketState.Open) { ArraySegment buffer = new ArraySegment(new byte[1024*4]); var result = await _webSocket.ReceiveAsync(buffer,CancellationToken.None); OnReceiveMessage?.Invoke(Encoding.UTF8.GetString(buffer.Array, 0, result.Count)); } } public void Dispose() { _webSocket.Dispose(); } }