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