subscribe method

Future<Map<String, dynamic>> subscribe(
  1. String channel
)

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