subscribe method

Future<StompSubscription> subscribe({
  1. required String destination,
  2. String? id,
  3. StompAckMode ackMode = StompAckMode.auto,
  4. bool requestReceipt = false,
  5. Map<String, String>? headers,
})

Subscribes to a destination

Implementation

Future<StompSubscription> subscribe({
  required String destination,
  String? id,
  StompAckMode ackMode = StompAckMode.auto,
  bool requestReceipt = false,
  Map<String, String>? headers,
}) async {
  _ensureConnected();

  final subscriptionId = id ?? _generateSubscriptionId();

  String? receiptId;
  if (requestReceipt) {
    receiptId = _generateReceiptId();
  }

  final subscribeFrame = StompFrameFactory.subscribe(
    destination: destination,
    id: subscriptionId,
    ack: ackMode.toHeaderValue(),
    receipt: receiptId,
    additionalHeaders: headers,
  );

  await _sendFrame(subscribeFrame);

  // Wait for receipt if requested
  if (receiptId != null) {
    await _waitForReceipt(receiptId, _timeout);
  }

  // Create subscription
  final subscription = _subscriptionManager.addSubscription(
    id: subscriptionId,
    destination: destination,
    ackMode: ackMode.toHeaderValue(),
    headers: headers,
  );

  _logger.info('Subscribed to $destination with ID $subscriptionId');
  return subscription;
}