center.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import 'dart:convert';
  2. import 'package:flutter/foundation.dart';
  3. import 'handler_dispatcher.dart';
  4. import 'interface/connection.dart';
  5. import 'interface/handler.dart';
  6. import 'interface/pipeline.dart';
  7. /// 通知中心
  8. abstract class NotificationCenter implements IProcessPipeline {
  9. bool _isRunning = false;
  10. final _handlerDispatcher = HandlerDispatcher();
  11. @override
  12. bool get isRunning => _isRunning;
  13. @protected
  14. set isRunning(bool val) => _isRunning = val;
  15. /// 消息连接
  16. IConnection get connection;
  17. ///消息处理器供应者
  18. IHandlerProvider get handlerProvider => _handlerDispatcher;
  19. /// 消息处理器调度员
  20. @protected
  21. HandlerDispatcher get handlerDispatcher => _handlerDispatcher;
  22. @override
  23. void start() async {
  24. connection.messageReceived.addListener(_onMessageReceived);
  25. connection.connect();
  26. isRunning = true;
  27. }
  28. @override
  29. void stop() {
  30. connection.messageReceived.removeListener(_onMessageReceived);
  31. connection.close();
  32. isRunning = false;
  33. }
  34. @protected
  35. void process(String data);
  36. void _onMessageReceived(Object sender, dynamic e) {
  37. if (e is String) {
  38. process(e);
  39. } else if (e is Uint8List) {
  40. final text = const Utf8Decoder().convert(e);
  41. process(text);
  42. }
  43. }
  44. }