internal override async Task StartPing() { _lastActivity = DateTime.Now.Add(_pingTimeout); var pingInterval = TimeSpan.FromMilliseconds(Math.Max(500, _pingTimeout.TotalMilliseconds / 3)); var skipInterval = TimeSpan.FromMilliseconds(Math.Max(250, _pingTimeout.TotalMilliseconds / 2)); while (_connection.IsConnected) { await Task.Delay(pingInterval).ConfigureAwait(false); try { var now = DateTime.Now; if (_lastActivity < now.Subtract(_pingTimeout)) { _connection.Close(WebSocketCloseReasons.GoingAway); } else if (_lastActivity < now.Subtract(skipInterval)) { await _connection.WriteInternalAsync(_pingBuffer, 0, true, false, WebSocketFrameOption.Ping, WebSocketExtensionFlags.None, CancellationToken.None).ConfigureAwait(false); } } catch (Exception ex) { Debug.Fail("BandwidthSavingPing.StartPing " + ex.Message); _connection.Close(WebSocketCloseReasons.ProtocolError); } } }
internal override async Task StartPing() { _lastPong = _lastActivity = DateTime.Now.Add(_pingTimeout); _pingInterval = TimeSpan.FromMilliseconds(Math.Max(500, _pingTimeout.TotalMilliseconds / 2)); while (_connection.IsConnected) { await Task.Delay(_pingInterval).ConfigureAwait(false); try { var now = DateTime.Now; if (_lastActivity.Add(_pingTimeout) < now) { _connection.Close(WebSocketCloseReasons.GoingAway); } else { ((UInt64)now.Ticks).ToBytes(_pingBuffer.Array, _pingBuffer.Offset); await _connection.WriteInternalAsync(_pingBuffer, 8, true, false, WebSocketFrameOption.Ping, WebSocketExtensionFlags.None, CancellationToken.None).ConfigureAwait(false); } } catch (Exception ex) { Debug.Fail("LatencyControlPing.StartPing " + ex.Message); _connection.Close(WebSocketCloseReasons.ProtocolError); } } }
internal override async Task StartPing() { _lastPong = DateTime.Now.Add(_pingTimeout); _pingInterval = TimeSpan.FromMilliseconds(Math.Max(500, _pingTimeout.TotalMilliseconds / 2)); while (_connection.IsConnected) { await Task.Delay(_pingInterval).ConfigureAwait(false); try { var now = DateTime.Now; if (_lastPong.Add(_pingTimeout) < now) { _connection.Close(WebSocketCloseReasons.GoingAway); } else { ((UInt64)now.Ticks).ToBytes(_pingBuffer.Array, _pingBuffer.Offset); _connection.WriteInternal(_pingBuffer, 8, true, false, WebSocketFrameOption.Ping, WebSocketExtensionFlags.None); } } catch { _connection.Close(WebSocketCloseReasons.ProtocolError); } } }
public override void Close() { _connection.Close(); }