connect method

Future connect(
  1. Uri uri, {
  2. ConnectOption? connectOption,
  3. int timeout = 5,
  4. bool retry = true,
  5. int retryInterval = 10,
  6. int retryCount = 3,
})

Connect to NATS server

Implementation

Future connect(
  Uri uri, {
  ConnectOption? connectOption,
  int timeout = 5,
  bool retry = true,
  int retryInterval = 10,
  int retryCount = 3,
}) async {
  this._retry = retry;
  _connectCompleter = Completer();
  if (_clientStatus == _ClientStatus.used) {
    throw Exception(
        NatsException('client in use. must close before call connect'));
  }
  if (status != Status.disconnected && status != Status.closed) {
    return Future.error('Error: status not disconnected and not closed');
  }
  _clientStatus = _ClientStatus.used;
  if (connectOption != null) _connectOption = connectOption;
  do {
    _connectLoop(
      uri,
      timeout: timeout,
      retryInterval: retryInterval,
      retryCount: retryCount,
    );

    if (_clientStatus == _ClientStatus.closed || status == Status.closed) {
      if (!_connectCompleter.isCompleted) {
        _connectCompleter.complete();
      }
      close();
      _clientStatus = _ClientStatus.closed;
      return;
    }
    if (!this._retry || retryCount != -1) {
      return _connectCompleter.future;
    }
    await for (var s in statusStream) {
      if (s == Status.disconnected) {
        break;
      }
      if (s == Status.closed) {
        return;
      }
    }
  } while (this._retry && retryCount == -1);
  return _connectCompleter.future;
}