handleEvent method

void handleEvent(
  1. SessionEvent event
)

Internal: dispatch an event to all handlers.

Implementation

void handleEvent(SessionEvent event) {
  if (_destroyed) return;

  // Notify event stream
  try {
    _eventStreamController?.add(event);
  } catch (_) {
    // Stream controller may be closed if session is being torn down.
  }

  // Notify persistent handlers
  for (final handler in List.of(_eventHandlers)) {
    try {
      handler(event);
    } catch (_) {
      // Individual handler errors must not prevent other handlers.
    }
  }

  // Notify one-shot handlers
  final toRemove = <_OnceHandler>[];
  for (final once in List.of(_onceHandlers)) {
    try {
      once.handler(event);
    } catch (_) {
      // Individual handler errors must not prevent other handlers.
    }
    toRemove.add(once);
  }
  _onceHandlers.removeWhere(toRemove.contains);
}