|
1 | 1 | import 'dart:async'; |
2 | 2 | import 'dart:isolate'; |
3 | 3 |
|
| 4 | +import 'package:logging/logging.dart'; |
4 | 5 | import 'package:sane/src/exceptions.dart'; |
| 6 | +import 'package:sane/src/extensions.dart'; |
5 | 7 | import 'package:sane/src/isolate_messages/exception.dart'; |
6 | 8 | import 'package:sane/src/isolate_messages/interface.dart'; |
7 | 9 | import 'package:sane/src/sane.dart'; |
8 | 10 |
|
| 11 | +final _logger = Logger('sane.isolate'); |
| 12 | + |
9 | 13 | class SaneIsolate { |
10 | 14 | SaneIsolate._( |
11 | 15 | this._isolate, |
@@ -36,7 +40,16 @@ class SaneIsolate { |
36 | 40 | onExit: exitReceivePort.sendPort, |
37 | 41 | ); |
38 | 42 |
|
39 | | - final sendPort = await receivePort.first as SendPort; |
| 43 | + final sendPortCompleter = Completer<SendPort>(); |
| 44 | + receivePort.listen((message) { |
| 45 | + if (message is _SendPortMessage) { |
| 46 | + sendPortCompleter.complete(message.sendPort); |
| 47 | + } else if (message is _LogRecordMessage) { |
| 48 | + _logger.redirect(message.record); |
| 49 | + } |
| 50 | + }); |
| 51 | + |
| 52 | + final sendPort = await sendPortCompleter.future; |
40 | 53 | return SaneIsolate._(isolate, sendPort, exitReceivePort); |
41 | 54 | } |
42 | 55 |
|
@@ -106,6 +119,18 @@ class _IsolateMessageEnvelope { |
106 | 119 | final IsolateMessage message; |
107 | 120 | } |
108 | 121 |
|
| 122 | +class _SendPortMessage { |
| 123 | + _SendPortMessage(this.sendPort); |
| 124 | + |
| 125 | + final SendPort sendPort; |
| 126 | +} |
| 127 | + |
| 128 | +class _LogRecordMessage { |
| 129 | + _LogRecordMessage(this.record); |
| 130 | + |
| 131 | + final LogRecord record; |
| 132 | +} |
| 133 | + |
109 | 134 | late Map<String, SaneDevice> _devices; |
110 | 135 |
|
111 | 136 | SaneDevice getDevice(String name) => _devices[name]!; |
|
0 commit comments