listen method
Fa partire l'isolate e intercetta la risposta o l'eventuale errore.
Implementation
Future<Validation> listen() async {
return checkState().fold(
(failures) => failures.first.toInvalid().toFuture(),
(val) async {
_state = IsolateState.running;
// Ci mettianmo in ascolto del risultato dell'isolate
_receivePort.listen((message) {
_state = IsolateState.completed;
_completer.complete(Valid(message));
_close();
});
// Ci mettianmo in ascolto degli errori dell'Isolate
_errorPort.listen((message) {
_state = IsolateState.completed;
_completer.complete(fromErrorMessage(message[0]).toInvalid());
_close();
});
final i = await _isolate!;
// Dobbiamo far partire l'Isolate che è stato creato in pausa per permettere
// di ascoltare risultato e errori prima che si completi
i.resume(i.pauseCapability!);
// Il completer verrà completato nelle listen della _receivePort o della _errorPort
return _completer.future;
});
}