private static async Task Execute(bool listen, CancellationToken token) { try { using (var socket = new ClientWebSocket()) { //socket.Options.KeepAliveInterval = TimeSpan.FromSeconds(10); var uri = new Uri("ws://127.0.0.1:5001"); WriteStatus($"connecting to {uri}..."); await socket.ConnectAsync(uri, token); WriteStatus("connected"); int clientNumber = Interlocked.Increment(ref Program.clientNumber); var named = new ClientWebSocketWithIdentity(socket, clientNumber); lock (clients) { clients.Add(named); } try { await ReceiveLoop(named, token); } finally { lock (clients) { clients.Remove(named); } } //int count = 0, clientNumber = Interlocked.Increment(ref Program.clientNumber); // if (listen) Task.Run(() => ReceiveLoop(socket, token)).FireOrForget(); //do //{ // string msg = $"hello from client {clientNumber} to server, message {++count}"; // int len = Encoding.ASCII.GetBytes(msg, 0, msg.Length, buffer, 0); // WriteStatus("sending..."); // await socket.SendAsync(new ArraySegment<byte>(buffer, 0, len), WebSocketMessageType.Text, true, token); // WriteStatus("sent..."); // await Task.Delay(5000, token); //} while (!token.IsCancellationRequested); } } catch (Exception ex) { WriteStatus(ex.GetType().Name); WriteStatus(ex.Message); } }
private static void ClientChannelReceiveMessages(ClientWebSocketWithIdentity named) { var socket = (WebSocketConnection)named.Socket; socket.TextAsync += msg => { if (logging) { var message = msg.GetText(); Console.WriteLine($"client {named.Id} received text, {msg.GetPayloadLength()} bytes, final: {msg.IsFinal}: {message}"); } return(null); }; }
private static async Task ClientReceiveLoop(ClientWebSocketWithIdentity named, CancellationToken token) { var socket = (ClientWebSocket)named.Socket; var buffer = new byte[2048]; while (!token.IsCancellationRequested) { var result = await socket.ReceiveAsync(new ArraySegment <byte>(buffer, 0, buffer.Length), token); if (logging) { var message = encoding.GetString(buffer, 0, result.Count); Console.WriteLine($"client {named.Id} received {result.MessageType}, {result.Count} bytes, final: {result.EndOfMessage}: {message}"); } } }
private static async Task Execute(bool listen, CancellationToken token) { try { using (var socket = new ClientWebSocket()) { var uri = new Uri("ws://127.0.0.1:5001"); WriteStatus($"connecting to {uri}..."); await socket.ConnectAsync(uri, token); WriteStatus("connected"); int clientNumber = Interlocked.Increment(ref Program.clientNumber); var named = new ClientWebSocketWithIdentity(socket, clientNumber); lock (clients) { clients.Add(named); } try { await ClientReceiveLoop(named, token); } finally { lock (clients) { clients.Remove(named); } } } } catch (Exception ex) { WriteStatus(ex.GetType().Name); WriteStatus(ex.Message); } }
private static async Task ExecuteChannel(bool listen) { try { const string uri = "ws://127.0.0.1:5001"; WriteStatus($"connecting to {uri}..."); var socket = await WebSocketConnection.ConnectAsync(uri); WriteStatus("connected"); int clientNumber = Interlocked.Increment(ref Program.clientNumber); var named = new ClientWebSocketWithIdentity(socket, clientNumber); lock (clients) { clients.Add(named); } ClientChannelReceiveMessages(named); } catch (Exception ex) { WriteStatus(ex.GetType().Name); WriteStatus(ex.Message); } }