center.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. if (connection != null) {
  25. connection!.messageReceived.addListener(_onMessageReceived);
  26. connection!.connect();
  27. isRunning = true;
  28. }
  29. }
  30. @override
  31. void stop() {
  32. connection?.messageReceived.removeListener(_onMessageReceived);
  33. connection?.close();
  34. isRunning = false;
  35. }
  36. @protected
  37. void process(String data);
  38. void _onMessageReceived(Object sender, dynamic e) {
  39. if (e is String) {
  40. process(e);
  41. } else if (e is Uint8List) {
  42. final text = const Utf8Decoder().convert(e);
  43. process(text);
  44. }
  45. }
  46. }