Chromium Code Reviews| Index: native_client_sdk/src/examples/demo/nacl_io/example.js |
| diff --git a/native_client_sdk/src/examples/demo/nacl_io/example.js b/native_client_sdk/src/examples/demo/nacl_io/example.js |
| index 1a13580c6d7145cece2e2edb729f86d1fd839e8d..128bcd037013552b9f62742984e069d5f908498e 100644 |
| --- a/native_client_sdk/src/examples/demo/nacl_io/example.js |
| +++ b/native_client_sdk/src/examples/demo/nacl_io/example.js |
| @@ -40,6 +40,33 @@ function attachListeners() { |
| var func = window[id]; |
| buttonEl.addEventListener('click', func); |
| } |
| + |
| + $('pipe_input_box').addEventListener('keypress', onPipeInput) |
| + $('pipe_output').disabled = true; |
| + |
| + $('pipe_name').addEventListener('change', |
| + function() { $('pipe_output').value = ''; }) |
| +} |
| + |
| +// Called with keypress events on the pipe input box |
| +function onPipeInput(e) { |
| + // Create an arraybuffer containing the 16-bit char code |
| + // from the keypress event. |
| + var buffer = new ArrayBuffer(1*2); |
| + var bufferView = new Uint16Array(buffer); |
| + bufferView[0] = e.charCode; |
| + |
| + // Pass the buffer in a dictionary over the NaCl module |
| + var pipeSelect = $('pipe_name'); |
| + var pipeName = pipeSelect[pipeSelect.selectedIndex].value; |
| + var message = { |
| + pipe: pipeName, |
| + operation: 'write', |
| + payload: buffer, |
| + }; |
| + nacl_module.postMessage(message); |
| + e.preventDefault(); |
| + return false; |
| } |
| function onRadioClicked(e) { |
| @@ -279,24 +306,44 @@ function postCall(func) { |
| }); |
| } |
| +function ArrayBufferToString(buf) { |
| + return String.fromCharCode.apply(null, new Uint16Array(buf)); |
| +} |
| + |
| // Called by the common.js module. |
| function handleMessage(message_event) { |
| var data = message_event.data; |
| if ((typeof(data) === 'string' || data instanceof String)) { |
| common.logMessage(data); |
| - } else { |
| - // Result from a function call. |
| - var params = data.args; |
| - var funcName = data.cmd; |
| - var callback = funcToCallback[funcName]; |
| - |
| - if (!callback) { |
| - common.logMessage('Error: Bad message ' + funcName + |
| - ' received from NaCl module.'); |
| - return; |
| + } else if (data instanceof Object) { |
| + var pipeName = data['pipe'] |
|
binji
2014/05/08 18:18:33
you can just do data.pipe in JavaScript.
neat, huh
|
| + if (pipeName !== undefined) { |
| + // Message for JavaScript I/O pipe |
| + var operation = data['operation']; |
| + if (operation == 'write') { |
| + $('pipe_output').value += ArrayBufferToString(data['payload']); |
| + } else if (operation == 'ack') { |
| + common.logMessage(pipeName + ": ack:" + data['payload']); |
| + } else { |
| + common.logMessage('Got unexpected pipe operation: ' + operation); |
| + } |
| + } else { |
| + // Result from a function call. |
| + var params = data.args; |
| + var funcName = data.cmd; |
| + var callback = funcToCallback[funcName]; |
| + |
| + if (!callback) { |
| + common.logMessage('Error: Bad message ' + funcName + |
| + ' received from NaCl module.'); |
| + return; |
| + } |
| + |
| + delete funcToCallback[funcName]; |
| + callback.apply(null, params); |
| } |
| - |
| - delete funcToCallback[funcName]; |
| - callback.apply(null, params); |
| + } else { |
| + common.logMessage('Error: Unknow message `' + data + |
| + '` received from NaCl module.'); |
| } |
| } |