Support proxies search Support svg display Optimize config persistence Add some scenes auto close connections Update core Optimize more details
56 lines
1.4 KiB
Dart
56 lines
1.4 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:fl_clash/enum/enum.dart';
|
|
import 'package:fl_clash/models/models.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
class ClashMessage {
|
|
final controller = StreamController<Map<String, Object?>>();
|
|
|
|
ClashMessage._() {
|
|
controller.stream.listen(
|
|
(message) {
|
|
if (message.isEmpty) {
|
|
return;
|
|
}
|
|
final m = AppMessage.fromJson(message);
|
|
for (final AppMessageListener listener in _listeners) {
|
|
switch (m.type) {
|
|
case AppMessageType.log:
|
|
listener.onLog(Log.fromJson(m.data));
|
|
break;
|
|
case AppMessageType.delay:
|
|
listener.onDelay(Delay.fromJson(m.data));
|
|
break;
|
|
case AppMessageType.request:
|
|
listener.onRequest(Connection.fromJson(m.data));
|
|
break;
|
|
case AppMessageType.loaded:
|
|
listener.onLoaded(m.data);
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
);
|
|
}
|
|
|
|
static final ClashMessage instance = ClashMessage._();
|
|
|
|
final ObserverList<AppMessageListener> _listeners =
|
|
ObserverList<AppMessageListener>();
|
|
|
|
bool get hasListeners {
|
|
return _listeners.isNotEmpty;
|
|
}
|
|
|
|
void addListener(AppMessageListener listener) {
|
|
_listeners.add(listener);
|
|
}
|
|
|
|
void removeListener(AppMessageListener listener) {
|
|
_listeners.remove(listener);
|
|
}
|
|
}
|
|
|
|
final clashMessage = ClashMessage.instance;
|