Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions examples/base/workerclass/coreworker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { SimpleWorker } from "simpleworker";

/*
* coreworker.js
* Runs INSIDE the worker context. Uses global onmessage/postMessage.
* This is where you respond to main-thread messages.
*/

self.onmessage = SimpleWorker.prototype.onmessage.bind(self);
51 changes: 51 additions & 0 deletions examples/base/workerclass/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright (c) 2016-2023 Moddable Tech, Inc.
*
* This file is part of the Moddable SDK.
*
* This work is licensed under the
* Creative Commons Attribution 4.0 International License.
* To view a copy of this license, visit
* <http://creativecommons.org/licenses/by/4.0>.
* or send a letter to Creative Commons, PO Box 1866,
* Mountain View, CA 94042, USA.
*
*/

import { SimpleWorker } from "simpleworker";

trace("main.js: hello\n");

let index = 0

function start() {
// note: chunk, heap (slots), and stack are very small - most real-world workers will require different settings
trace("main.js: Starting, creating worker\n");
const aWorker = new SimpleWorker("coreworker", {
static: 8 * 1024, // total bytes for slots and chunks, in bytes
chunk: { // size in bytes, for strings, array buffers
initial: 1536,
incremental: 256
},
heap: { // in 16 byte slots
initial: 128, // 2K bytes
incremental: 32
},
stack: 128 // number of 16 byte slots
});
trace("main.js: Worker created\n");
aWorker.postMessage({hello: "world", index: ++index});
aWorker.postMessage("hello, again");
aWorker.postMessage([1, 2, 3]);
trace("main.js: Messages sent\n");
aWorker.onmessage = function(message) {
trace(`main.js: worker -> ${JSON.stringify(message)}\n`);
if (3 === message.counter) {
trace(`main.js: restarting worker ${index}\n`);
aWorker.terminate();
start();
}
}
}

start();
31 changes: 31 additions & 0 deletions examples/base/workerclass/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"include": [
"$(MODDABLE)/examples/manifest_base.json",
"$(MODULES)/base/worker/manifest.json"
],
"creation": {
"static": 12288,
"chunk": {
"initial": 1536,
"incremental": 512
},
"heap": {
"initial": 64,
"incremental": 32
},
"stack": 128,
"keys": {
"available": 32,
"name": 53,
"symbol": 3
},
"main": "main"
},
"modules": {
"*": [
"./main",
"./simpleworker",
"./coreworker"
]
}
}
15 changes: 15 additions & 0 deletions examples/base/workerclass/simpleworker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* SimpleWorker: main-thread wrapper that subclasses Worker.
* This class lives on the main side. The *worker-side* logic is in "coreworker.js".
*/

import Worker from "worker";

export class SimpleWorker extends Worker {
static counter = 0;

onmessage(msg) {
trace(`simpleworker.js: counter: ${SimpleWorker.counter} message: ${JSON.stringify(msg)}\n`);
this.postMessage({hello: "from simple worker", counter: ++SimpleWorker.counter});
}
}