private async Task KeepALiveLoop(SocketAdapter adapter, CancellationToken token) { while (!token.IsCancellationRequested) { await adapter.Socket.SendAsync($"ping {DateTime.UtcNow.ToString("o")}", token); await Task.Delay(TimeSpan.FromSeconds(30)); } }
public async Task Start(WsConnection webSocket, CancellationTokenSource cancellation) { _cancellation = cancellation; using var connection = await _connector.ConnectAsync(EndPoint); var token = _cancellation.Token; var adapter = SocketAdapter.Create(webSocket, connection); var receiveLoop = ReceiveLoop(adapter, token); var handshakeLoop = KeepALiveLoop(adapter, token); // Create class to loop over taks until cancel or exception await new TaskRunner(new[] { receiveLoop, handshakeLoop }, token).Start(); }
private async Task ReceiveLoop(SocketAdapter adapter, CancellationToken token) { while (!token.IsCancellationRequested) { try { var content = await adapter.Socket.ReceiveAsync(512, TimeSpan.FromSeconds(15), token); await adapter.WebSocket.SendAsync("Update", content, token); } catch (TaskCanceledException) { break; } catch (SocketException) { throw; } catch (Exception ex) { _logger.LogError(ex, "Something went wrong while receiving a message"); } } }