startInIsolateFromRom static method

Future<Chip8IsolatePortAndStreams> startInIsolateFromRom(
  1. Uint8List rom
)

Implementation

static Future<Chip8IsolatePortAndStreams> startInIsolateFromRom(Uint8List rom) async {
  final mainThreadReceivePort = ReceivePort();
  final completer = Completer<Chip8IsolatePortAndStreams>();

  await Isolate.spawn<SendPort>(_isolateEntrypointFromRom(rom), mainThreadReceivePort.sendPort);
  var bStream = mainThreadReceivePort.asBroadcastStream();

  bStream.listen((event) {
    if (event is SendPort) {
      completer.complete(Chip8IsolatePortAndStreams(
        event,
        bStream.where((event) => event is Chip8Display).cast<Chip8Display>(),
        bStream.where((event) => event is Chip8SoundEvent).cast<Chip8SoundEvent>(),
      ));
    }
    if (event is String && event == "terminate") mainThreadReceivePort.close();
  });

  return completer.future;
}