connect method
Establishes a websocket connection to uri.
This method can be called multiple times and will always result in a single connection.
Implementation
Future<void> connect({final Duration? timeLimit}) {
  final DateTime start = _now();
  return _lock.synchronized(
    timeout: timeLimit,
    () => _connect(timeLimit: _remaining(start, timeLimit: timeLimit)),
  );
}