subscribe method
Send subscribe message
Implementation
Future<Map<String, dynamic>> subscribe(String channel) async {
_logger.info('Dispatcher: Subscribing to channel: $channel');
_logger.info('Dispatcher: Current state: $_state, clientId: $_clientId');
// Allow subscriptions during connecting state (2) as well as connected state (3)
// This is needed because extensions may try to subscribe during handshake response processing
if ((_state != 3 && _state != 2) || _clientId == null) {
// connected or connecting
_logger.severe(
'Dispatcher: Cannot subscribe - not connected/connecting or no clientId. State: $_state, clientId: $_clientId');
throw FayeError.network('Not connected');
}
final message = {
'channel': '/meta/subscribe',
'clientId': _clientId,
'subscription': channel,
'id': _generateMessageId(),
};
// Apply extension if available
Map<String, dynamic> processedMessage = message;
if (_extension != null) {
try {
_logger.info('Dispatcher: Original subscription message: $message');
processedMessage = _extension.outgoing(message);
_logger.info('Dispatcher: Extension returned: $processedMessage');
_logger.info('Dispatcher: Applied extension to subscription message');
} catch (e) {
_logger.warning('Dispatcher: Extension processing failed: $e');
}
}
_logger.info('Dispatcher: Subscribing with message: $processedMessage');
final response = await _sendMessage(processedMessage);
_logger.info('Dispatcher: Subscribe response: $response');
_logger
.info('Dispatcher: Subscribe response type: ${response.runtimeType}');
return response;
}