1 | | | import 'dart:isolate'; |
2 | | |
|
3 | | | import '../_worker_runner.dart'; |
4 | | | import '../channel.dart'; |
5 | | | import '../local_worker.dart'; |
6 | | | import '../worker_service.dart'; |
7 | | |
|
8 | | | class _VmLocalWorker<W extends WorkerService> extends LocalWorker<W> { |
9 | | 2 | _VmLocalWorker._(W service) : super(service) { |
10 | | 1 | final runner = WorkerRunner.use(service); |
11 | | 4 | _port.listen((message) => runner.processMessage(message)); |
12 | | | } |
13 | | |
|
14 | | | final _port = ReceivePort(); |
15 | | 4 | late Channel? _channel = Channel.deserialize(_port.sendPort); |
16 | | |
|
17 | | 1 | @override |
18 | | 1 | Channel? get channel => _channel; |
19 | | |
|
20 | | 1 | @override |
21 | | | void stop() { |
22 | | 2 | _port.close(); |
23 | | 2 | _channel?.close(); |
24 | | 1 | _channel = null; |
25 | | | } |
26 | | | } |
27 | | |
|
28 | | | /// Creates a [LocalWorker] on a native platform. |
29 | | 1 | LocalWorker<W> createLocalWorker<W extends WorkerService>(W service) => |
30 | | 1 | _VmLocalWorker._(service); |