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