diff --git a/example-workers.js b/example-workers.js new file mode 100644 index 0000000..d20de4e --- /dev/null +++ b/example-workers.js @@ -0,0 +1,27 @@ +h5 +.worker('/example/worker.js') +.send(data) +.error(function(event) { + console.error(event.message + " in " + event.filename + " at line " + event.lineno); + event.preventDefault(); +}); +.receive(function(data) { + console.log(data); +}) +.abort(); + +// Inside the Worker +importScripts("core.h5ive.js", "worker.h5ive.js"); + +h5 +.worker(self) +.receive(function(data) { + var sqrt; + console.log(data); + sqrt = Math.sqrt(data); + + console.log(h5.worker(self) === this); + this.send(sqrt); + this.__raw__.postMessage(sqrt); +}); + diff --git a/worker.h5ive.js b/worker.h5ive.js new file mode 100644 index 0000000..3d44795 --- /dev/null +++ b/worker.h5ive.js @@ -0,0 +1,54 @@ +/*! worker.h5ive.js | (c) Alex Lee | MIT License: http://getify.mit-license.org */ + +(function(h5) { + + if (!h5) { + throw new Error("worker.h5ive: core.h5ive required."); + } + + var _self = this.self; + + h5.worker = function(opts) { + var publicAPI, worker; + + if (typeof window === "undefined" && opts === _self) { + // Inside a Worker + worker = _self; + } + else if (typeof opts === "string" ) { + worker = new Worker(opts); + } + + function send(data) { + worker.postMessage(data); + return publicAPI; + } + + function receive(handler) { + worker.onmessage = function(e) { + handler.call(publicAPI, e.data, e); + }; + return publicAPI; + } + + function error(handler) { + worker.onerror = handler; + return publicAPI; + } + + function abort() { + worker.terminate(); + return publicAPI; + } + + publicAPI = { + __raw__ : worker, + send : send, + receive : receive, + error : error, + abort : abort + }; + + return publicAPI; + }; +}(this.h5));