send method

  1. @override
void send(
  1. Envelope envelope, {
  2. bool transferBuffers = false,
})
override

Sends a task envelope. When transferBuffers is true, every ArrayBuffer reachable from the payload is moved (zero-copy) rather than cloned, detaching it on the sending side.

Implementation

@override
void send(Envelope envelope, {bool transferBuffers = false}) {
  if (_terminated) {
    throw StateError('send() after terminate() on FakeWorkerTransport');
  }
  if (envelope.kind != EnvelopeKind.task) {
    throw ArgumentError.value(
      envelope.kind,
      'envelope',
      'FakeWorkerTransport only accepts task envelopes',
    );
  }
  sentEnvelopes.add(envelope);
  sentTransferFlags.add(transferBuffers);
  // Clone at send time (like a real postMessage would), even when the job
  // is buffered awaiting readiness.
  final job = _FakeJob(
    id: envelope.id!,
    task: envelope.task!,
    payload: _clonePayloads
        ? simulateStructuredClone(envelope.payload)
        : envelope.payload,
    scriptedFailure:
        _scriptedFailures.isEmpty ? null : _scriptedFailures.removeAt(0),
  );
  if (!_isReady) {
    _bufferedJobs.add(job);
    return;
  }
  _run(job);
}