| 1 | | | import 'dart:async'; |
| 2 | | | import 'dart:isolate'; |
| 3 | | | |
| 4 | | | import 'package:logger/web.dart'; |
| 5 | | | import 'package:using/using.dart'; |
| 6 | | | |
| 7 | | | import '../../channel.dart'; |
| 8 | | | import '../../exceptions/exception_manager.dart'; |
| 9 | | | import '../../exceptions/task_terminated_exception.dart'; |
| 10 | | | import '../../local_worker/local_worker.dart'; |
| 11 | | | import '../../typedefs.dart'; |
| 12 | | | import '../xplat/_worker_runner.dart'; |
| 13 | | | import '_worker_runner.dart'; |
| 14 | | | |
| 15 | | | base class _VmLocalWorker<W> with Releasable implements LocalWorker<W> { |
| 16 | | 1 | _VmLocalWorker._(this.service, this.operations, this.exceptionManager) { |
| 17 | | 1 | final runner = WorkerRunner.use(this); |
| 18 | | 3 | _port.listen(runner.handle); |
| 19 | | 2 | _channel = Channel.deserialize( |
| 20 | | 4 | _port.sendPort, runner.internalLogger, exceptionManager)!; |
| 21 | | | } |
| 22 | | | |
| 23 | | | @override |
| 24 | | | final W service; |
| 25 | | | |
| 26 | | | @override |
| 27 | | | final OperationsMap operations; |
| 28 | | | |
| 29 | | | @override |
| 30 | | | final ExceptionManager exceptionManager; |
| 31 | | | |
| 32 | | | @override |
| 33 | | | Logger? channelLogger; |
| 34 | | | |
| 35 | | | final _port = ReceivePort(); |
| 36 | | | late Channel? _channel; |
| 37 | | | |
| 38 | | 1 | @override |
| 39 | | 1 | Channel? get channel => _channel; |
| 40 | | | |
| 41 | | 0 | @override |
| 42 | | | FutureOr<void> start() {} |
| 43 | | | |
| 44 | | 0 | @override |
| 45 | | | void stop() { |
| 46 | | 0 | _port.close(); |
| 47 | | 0 | _channel?.close(); |
| 48 | | 0 | _channel = null; |
| 49 | | | } |
| 50 | | | |
| 51 | | 0 | @override |
| 52 | | 0 | void terminate([TaskTerminatedException? ex]) => stop(); |
| 53 | | | } |
| 54 | | | |
| 55 | | | /// Creates a [LocalWorker] on a native platform. |
| 56 | | 1 | LocalWorker<W> createLocalWorker<W>(W service, OperationsMap operations, |
| 57 | | | ExceptionManager exceptionManager) => |
| 58 | | 1 | _VmLocalWorker<W>._(service, operations, exceptionManager); |