1+ import 'dart:async' ;
12import 'dart:isolate' ;
23import 'dart:typed_data' ;
34
5+ import 'package:logging/logging.dart' ;
46import 'package:sane/sane.dart' ;
7+ import 'package:sane/src/extensions.dart' ;
58import 'package:sane/src/isolate_messages/cancel.dart' ;
69import 'package:sane/src/isolate_messages/close.dart' ;
710import 'package:sane/src/isolate_messages/control_button_option.dart' ;
@@ -19,6 +22,8 @@ import 'package:sane/src/isolate_messages/read.dart';
1922import 'package:sane/src/isolate_messages/set_io_mode.dart' ;
2023import 'package:sane/src/isolate_messages/start.dart' ;
2124
25+ final _logger = Logger ('sane.isolate' );
26+
2227class SaneIsolate implements Sane {
2328 SaneIsolate ({
2429 required Sane sane,
@@ -38,7 +43,16 @@ class SaneIsolate implements Sane {
3843 sane: _sane,
3944 ),
4045 );
41- _sendPort = await receivePort.first as SendPort ;
46+
47+ final sendPortCompleter = Completer <SendPort >();
48+ receivePort.listen ((message) {
49+ if (message is _SendPortMessage ) {
50+ sendPortCompleter.complete (message.sendPort);
51+ } else if (message is _LogRecordMessage ) {
52+ _logger.redirect (message.record);
53+ }
54+ });
55+ _sendPort = await sendPortCompleter.future;
4256 }
4357
4458 void kill () {
@@ -292,7 +306,16 @@ class _IsolateEntryPointArgs {
292306
293307void _isolateEntryPoint (_IsolateEntryPointArgs args) {
294308 final isolateReceivePort = ReceivePort ();
295- args.mainSendPort.send (isolateReceivePort.sendPort);
309+ args.mainSendPort.send (
310+ _SendPortMessage (isolateReceivePort.sendPort),
311+ );
312+
313+ Logger .root.level = Level .ALL ;
314+ Logger .root.onRecord.listen ((record) {
315+ args.mainSendPort.send (
316+ _LogRecordMessage (record),
317+ );
318+ });
296319
297320 final sane = args.sane;
298321 isolateReceivePort.cast <_IsolateMessageEnvelope >().listen ((envelope) async {
@@ -320,3 +343,13 @@ class _IsolateMessageEnvelope {
320343 final SendPort replyPort;
321344 final IsolateMessage message;
322345}
346+
347+ class _SendPortMessage {
348+ _SendPortMessage (this .sendPort);
349+ final SendPort sendPort;
350+ }
351+
352+ class _LogRecordMessage {
353+ _LogRecordMessage (this .record);
354+ final LogRecord record;
355+ }
0 commit comments