listen method

Future<Validation> listen()

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;
    });
}