runVmapWorker function

void runVmapWorker()

Builds tiles, or draws label glyphs, for the page that started this worker, as the first message it is sent asks.

Implementation

void runVmapWorker() {
  final scope = globalContext as web.DedicatedWorkerGlobalScope;
  StreamController<Object?>? inbox;
  scope.onmessage = ((web.MessageEvent event) {
    final message = decodeMessage(event.data);
    final open = inbox;
    if (open != null) return open.add(message);
    final box = inbox = StreamController<Object?>();
    scope.postMessage(null);
    final init = message! as List<Object?>;
    final main = init.isNotEmpty && init[0] == GlyphRasterWorker.glyphWorkerTag
        ? glyphWorkerMain
        : tileWorkerMain;
    unawaited(
      main(init, (answer) {
        final moved = <JSObject>[];
        scope.postMessage(encodeMessage(answer, moved), moved.toJS);
      }, box.stream),
    );
  }).toJS;
}