import 'dart:async'; import 'package:clide/kernel/src/events/types.dart'; class DaemonBus { DaemonBus(); final StreamController _controller = StreamController.broadcast(); Stream get stream => _controller.stream; Stream on() => _controller.stream.where((e) => e.event is T).map((e) => e.event as T); void emit(ClideEvent event) { if (_controller.isClosed) return; _controller.add(ClideEventEnvelope(event, DateTime.now().toUtc())); } Future dispose() => _controller.close(); }