onSignal method

EventSubscription onSignal(
  1. String signalName,
  2. void callback(
    1. dynamic data
    ), {
  3. String? subscriberModuleId,
  4. Duration? timeout,
})

Subscribe to a named signal (String-based event) Use this for zero-import communication between modules

Implementation

EventSubscription onSignal(
  String signalName,
  void Function(dynamic data) callback, {
  String? subscriberModuleId,
  Duration? timeout,
}) {
  // Check permission
  if (!PermissionChecker().checkPermission(
    subscriberModuleId ?? 'unknown',
    Permission.eventListen,
    resource: signalName,
  )) {
    AirLogger.warning(
      'Signal subscription denied: $subscriberModuleId lacks eventListen permission for $signalName',
    );
    final dummy = EventSubscription(
      id: 'denied',
      eventType: dynamic,
      callback: (_) {},
    );
    dummy.cancel();
    return dummy;
  }

  final subscription = EventSubscription(
    id: 'signal_${++_subscriptionIdCounter}',
    eventType: dynamic, // Using dynamic as a placeholder for string signals
    callback: callback,
    subscriberModuleId: subscriberModuleId,
    timeout: timeout,
  );

  _signalSubscriptions.putIfAbsent(signalName, () => []);
  _signalSubscriptions[signalName]!.add(subscription);

  AirLogger.debug(
    'Subscribed to signal "$signalName"',
    context: {'id': subscription.id, 'module': subscriberModuleId},
  );
  return subscription;
}