on<T extends ModuleEvent> method

EventSubscription on<T extends ModuleEvent>(
  1. void callback(
    1. T event
    ), {
  2. String? subscriberModuleId,
  3. Duration? timeout,
})

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