123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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 {
- if (connection != null) {
- 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);
- }
- }
- }
|