connect method
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;
}
}