Files
MWClash/lib/core/event.dart
chen08209 ed7868282a Add android separates the core process
Support core status check and force restart

Optimize proxies page and access page

Update flutter and pub dependencies

Update go version

Optimize more details
2025-09-23 15:23:58 +08:00

69 lines
1.7 KiB
Dart

import 'dart:async';
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/models/models.dart';
import 'package:flutter/foundation.dart';
abstract mixin class CoreEventListener {
void onLog(Log log) {}
void onDelay(Delay delay) {}
void onRequest(TrackerInfo connection) {}
void onLoaded(String providerName) {}
void onCrash(String message) {}
}
class CoreEventManager {
final _controller = StreamController<CoreEvent>();
CoreEventManager._() {
_controller.stream.listen((event) {
for (final CoreEventListener listener in _listeners) {
switch (event.type) {
case CoreEventType.log:
listener.onLog(Log.fromJson(event.data));
break;
case CoreEventType.delay:
listener.onDelay(Delay.fromJson(event.data));
break;
case CoreEventType.request:
listener.onRequest(TrackerInfo.fromJson(event.data));
break;
case CoreEventType.loaded:
listener.onLoaded(event.data);
break;
case CoreEventType.crash:
listener.onCrash(event.data);
break;
}
}
});
}
static final CoreEventManager instance = CoreEventManager._();
final ObserverList<CoreEventListener> _listeners =
ObserverList<CoreEventListener>();
bool get hasListeners {
return _listeners.isNotEmpty;
}
void sendEvent(CoreEvent event) {
_controller.add(event);
}
void addListener(CoreEventListener listener) {
_listeners.add(listener);
}
void removeListener(CoreEventListener listener) {
_listeners.remove(listener);
}
}
final coreEventManager = CoreEventManager.instance;