connect method

Future<void> connect({
  1. Map<String, String>? headers,
})

Connect to server

Implementation

Future<void> connect({Map<String, String>? headers}) async {
  _logger.info('Dispatcher: Starting connection to $_endpoint');
  _logger.info('Dispatcher: Current state: $_state');

  if (_state != 1) {
    _logger.warning(
        'Dispatcher: Cannot connect, not in unconnected state. Current state: $_state');
    return; // unconnected
  }

  _logger.info('Dispatcher: Updating state to connecting (2)');
  _updateState(2); // connecting

  try {
    _logger.info('Dispatcher: Starting transport connection...');
    // Connect transport first
    await _connectTransport(headers: headers);
    _logger.info('Dispatcher: Transport connection completed');

    _logger.info('Dispatcher: Starting handshake...');
    // Perform handshake after transport is connected
    await _handshake(headers: headers);
    _logger.info('Dispatcher: Handshake completed successfully');

    _logger.info('Dispatcher: Updating state to connected (3)');
    _updateState(3); // connected
    _logger.info('Dispatcher: Connection completed successfully');

    // Don't immediately send connect - wait for first operation to trigger it
    _logger.info('Dispatcher: Handshake complete, ready for operations');
  } catch (e) {
    _logger.severe('Dispatcher: Connection failed with error: $e');
    _logger.severe('Dispatcher: Updating state to disconnected (4)');
    _updateState(4); // disconnected
    _emitError(FayeError.network('Connection failed: $e'));
    rethrow;
  }
}