setupIsolateHandshake function
Future<SendPort>
setupIsolateHandshake({
- required ReceivePort receivePort,
- required void onResponse(
- dynamic
- required Duration timeout,
- required String timeoutMessage,
Performs the initial SendPort handshake with a newly spawned isolate.
Implementation
Future<SendPort> setupIsolateHandshake({
required ReceivePort receivePort,
required void Function(dynamic) onResponse,
required Duration timeout,
required String timeoutMessage,
}) async {
final Completer<SendPort> initCompleter = Completer<SendPort>();
late final StreamSubscription<dynamic> subscription;
subscription = receivePort.listen((message) {
if (!initCompleter.isCompleted) {
if (message is SendPort) {
initCompleter.complete(message);
} else if (message is Map && message['error'] != null) {
initCompleter.completeError(StateError(message['error'] as String));
} else {
initCompleter.completeError(
StateError('Expected SendPort, got ${message.runtimeType}'),
);
}
return;
}
onResponse(message);
});
return initCompleter.future.timeout(
timeout,
onTimeout: () {
subscription.cancel();
throw TimeoutException(timeoutMessage);
},
);
}