import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'handler_dispatcher.dart'; import 'interface/connection.dart'; import 'interface/handler.dart'; import 'interface/pipeline.dart'; /// 通知中心 abstract class NotificationCenter implements IProcessPipeline { bool _isRunning = false; final _handlerDispatcher = HandlerDispatcher(); @override bool get isRunning => _isRunning; @protected set isRunning(bool val) => _isRunning = val; /// 消息连接 IConnection get connection; ///消息处理器供应者 IHandlerProvider get handlerProvider => _handlerDispatcher; /// 消息处理器调度员 @protected HandlerDispatcher get handlerDispatcher => _handlerDispatcher; @override void start() async { connection.messageReceived.addListener(_onMessageReceived); connection.connect(); isRunning = true; } @override void stop() { connection.messageReceived.removeListener(_onMessageReceived); connection.close(); isRunning = false; } @protected void process(String data); void _onMessageReceived(Object sender, dynamic e) { if (e is String) { process(e); } else if (e is Uint8List) { final text = const Utf8Decoder().convert(e); process(text); } } }