connect method

Future<void> connect()

Connects to the STOMP server

Implementation

Future<void> connect() async {
  if (_state != StompClientState.disconnected) {
    throw StompStateException('Cannot connect', _state.name, 'disconnected');
  }

  _setState(StompClientState.connecting);

  try {
    // Create stream to server
    _stream = await _host.newStream(_serverPeerId, [StompProtocols.stomp], Context());
    await _stream!.scope().setService(StompProtocols.serviceName);
    await _stream!.setDeadline(DateTime.now().add(_timeout));

    // Start frame reading
    _startFrameReader();

    // Send CONNECT frame
    final connectFrame = StompFrameFactory.connect(
      host: _hostName,
      login: _login,
      passcode: _passcode,
    );

    await _sendFrame(connectFrame);

    // Wait for CONNECTED frame
    final connectedFrame = await _waitForFrame(StompCommands.connected, _timeout);
    await _handleConnectedFrame(connectedFrame);

    _setState(StompClientState.connected);
    _logger.info('Connected to STOMP server $_serverPeerId');

  } catch (e) {
    _setState(StompClientState.error);
    await _cleanup();
    rethrow;
  }
}