on<T extends ModuleEvent> method
Subscribe to events of a specific type Returns a subscription that can be cancelled
timeout - Optional duration after which the subscription auto-expires
Implementation
EventSubscription on<T extends ModuleEvent>(
void Function(T event) callback, {
String? subscriberModuleId,
Duration? timeout,
}) {
// Check permission
if (!PermissionChecker().checkPermission(
subscriberModuleId ?? 'unknown',
Permission.eventListen,
resource: T.toString(),
)) {
AirLogger.warning(
'Subscription denied: $subscriberModuleId lacks eventListen permission for $T',
);
// Return a dummy cancelled subscription
final dummy = EventSubscription(
id: 'denied',
eventType: T,
callback: (_) {},
);
dummy.cancel();
return dummy;
}
final subscription = EventSubscription(
id: 'sub_${++_subscriptionIdCounter}',
eventType: T,
callback: callback,
subscriberModuleId: subscriberModuleId,
timeout: timeout,
);
_subscriptions.putIfAbsent(T, () => []);
_subscriptions[T]!.add(subscription);
AirLogger.debug(
'Subscribed to ${T.toString()}',
context: {
'id': subscription.id,
'module': subscriberModuleId,
'timeout': timeout?.inSeconds,
},
);
return subscription;
}