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' ;
@@ -18,6 +21,7 @@ import 'package:sane/src/isolate_messages/open.dart';
1821import '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' ;
24+ import 'package:sane/src/logger.dart' ;
2125
2226class SaneIsolate implements Sane {
2327 SaneIsolate ({
@@ -38,7 +42,16 @@ class SaneIsolate implements Sane {
3842 sane: _sane,
3943 ),
4044 );
41- _sendPort = await receivePort.first as SendPort ;
45+
46+ final sendPortCompleter = Completer <SendPort >();
47+ receivePort.listen ((message) {
48+ if (message is _SendPortMessage ) {
49+ sendPortCompleter.complete (message.sendPort);
50+ } else if (message is _LogRecordMessage ) {
51+ logger.redirect (message.record);
52+ }
53+ });
54+ _sendPort = await sendPortCompleter.future;
4255 }
4356
4457 void kill () {
@@ -292,7 +305,16 @@ class _IsolateEntryPointArgs {
292305
293306void _isolateEntryPoint (_IsolateEntryPointArgs args) {
294307 final isolateReceivePort = ReceivePort ();
295- args.mainSendPort.send (isolateReceivePort.sendPort);
308+ args.mainSendPort.send (
309+ _SendPortMessage (isolateReceivePort.sendPort),
310+ );
311+
312+ Logger .root.level = Level .ALL ;
313+ Logger .root.onRecord.listen ((record) {
314+ args.mainSendPort.send (
315+ _LogRecordMessage (record),
316+ );
317+ });
296318
297319 final sane = args.sane;
298320 isolateReceivePort.cast <_IsolateMessageEnvelope >().listen ((envelope) async {
@@ -320,3 +342,13 @@ class _IsolateMessageEnvelope {
320342 final SendPort replyPort;
321343 final IsolateMessage message;
322344}
345+
346+ class _SendPortMessage {
347+ _SendPortMessage (this .sendPort);
348+ final SendPort sendPort;
349+ }
350+
351+ class _LogRecordMessage {
352+ _LogRecordMessage (this .record);
353+ final LogRecord record;
354+ }
0 commit comments