diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-09-12 14:47:17 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-09-12 14:47:17 -0700 |
commit | 6010666be99cd0322babba1174cfbc65c776deb5 (patch) | |
tree | dad63b03b751394c169de61fbf2c195f4faf5344 /src/proxyClient.js | |
parent | 38890204ed1f5f8dd34cced7c42fc9cf42dccab5 (diff) | |
parent | f9dff9b3f2e95b2ca8e5b8fd97538f301fd080fe (diff) |
Merge branch 'incoming'
Diffstat (limited to 'src/proxyClient.js')
-rw-r--r-- | src/proxyClient.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/proxyClient.js b/src/proxyClient.js new file mode 100644 index 00000000..04f7ed11 --- /dev/null +++ b/src/proxyClient.js @@ -0,0 +1,74 @@ + +// proxy to/from worker + +Module.ctx = Module.canvas.getContext('2d'); + +var worker = new Worker('{{{ filename }}}.js'); + +worker.onmessage = function(event) { + var data = event.data; + switch (data.target) { + case 'stdout': { + Module.print(data.content); + break; + } + case 'stderr': { + Module.printErr(data.content); + break; + } + case 'window': { + window[data.method](); + break; + } + case 'canvas': { + switch (data.op) { + case 'resize': { + Module.canvas.width = data.width; + Module.canvas.height = data.height; + Module.canvasData = Module.ctx.getImageData(0, 0, data.width, data.height); + postMessage({ target: 'canvas', boundingClientRect: Module.canvas.getBoundingClientRect() }); + break; + } + case 'render': { + Module.canvasData.data.set(data.image.data); + Module.ctx.putImageData(Module.canvasData, 0, 0); + break; + } + default: throw 'eh?'; + } + break; + } + default: throw 'what?'; + } +}; + +function cloneEvent(event) { + var ret = {}; + for (var x in event) { + if (x == x.toUpperCase()) continue; + var prop = event[x]; + if (typeof prop === 'number' || typeof prop === 'string') ret[x] = prop; + } + return ret; +}; + +['keydown', 'keyup', 'keypress', 'blur', 'visibilitychange'].forEach(function(event) { + document.addEventListener(event, function(event) { + worker.postMessage({ target: 'document', event: cloneEvent(event) }); + event.preventDefault(); + }); +}); + +['unload'].forEach(function(event) { + window.addEventListener(event, function(event) { + worker.postMessage({ target: 'window', event: cloneEvent(event) }); + }); +}); + +['mousedown', 'mouseup', 'mousemove', 'DOMMouseScroll', 'mousewheel', 'mouseout'].forEach(function(event) { + Module.canvas.addEventListener(event, function(event) { + worker.postMessage({ target: 'canvas', event: cloneEvent(event) }); + event.preventDefault(); + }, true); +}); + |