Mercurial > hg > orthanc-stone
view Platforms/Wasm/WasmWebService.js @ 508:7105a0bad250 bgo-commands-codegen
- Added HandleSerializedMessage to IStoneApplication (empty impl)
- Split UpdateWebApplication with "WithString" and "WithSerializedMessage" variants
- Due to the modules in TS, globals are now unallowed and the callbacks from C++ to JS are stored in the "window" instance
- Split UpdateStoneApplicationStatusFromCpp with "WithString" and "WithSerializedMessage" variants
- Split NotifyStatusUpdateFromCppToWeb with "WithString" and "WithSerializedMessage" variants
- SendMessageToStoneApplication (C++ global) has been split into SendSerializedMessageToStoneApplication and SendCommandToStoneApplication
- In WasmPlatformApplicationAdapter: HandleMessageFromWeb becomes HandleCommandFromWeb
- In WasmPlatformApplicationAdapter: added HandleSerializedMessageFromWeb
- stonegentool now handles the "json" primitive type (used, a.o., in the VSOL "EditInstance" message)
- Fixed indentation and added json serialization overloads in the stonegentool templates
- Added test of the json primitive type to testWasmIntegrated (in Resources/CodeGeneration)
- Adapted testWasmIntegrated (in Resources/CodeGeneration) to the changes above
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 06 Mar 2019 10:14:59 +0100 |
parents | 5055031f4a06 |
children | 1b9973905e15 |
line wrap: on
line source
mergeInto(LibraryManager.library, { WasmWebService_GetAsync: function(callableSuccess, callableFailure, url, headersInJsonString, payload, timeoutInSeconds) { // Directly use XMLHttpRequest (no jQuery) to retrieve the raw binary data // http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/ var xhr = new XMLHttpRequest(); var url_ = UTF8ToString(url); var headersInJsonString_ = UTF8ToString(headersInJsonString); xhr.open('GET', url_, true); xhr.responseType = 'arraybuffer'; xhr.timeout = timeoutInSeconds * 1000; var headers = JSON.parse(headersInJsonString_); for (var key in headers) { xhr.setRequestHeader(key, headers[key]); } //console.log(xhr); xhr.onreadystatechange = function() { if (this.readyState == XMLHttpRequest.DONE) { if (xhr.status === 200) { var s = xhr.getAllResponseHeaders(); var headers = _malloc(s.length + 1); stringToUTF8(s, headers, s.length + 1); // TODO - Is "new Uint8Array()" necessary? This copies the // answer to the WebAssembly stack, hence necessitating // increasing the TOTAL_STACK parameter of Emscripten window.WasmWebService_NotifySuccess(callableSuccess, url_, new Uint8Array(this.response), this.response.byteLength, headers, payload); } else { window.WasmWebService_NotifyError(callableFailure, url_, payload); } } } xhr.send(); }, WasmWebService_ScheduleLaterCachedSuccessNotification: function (brol) { setTimeout(function() { WasmWebService_NotifyCachedSuccess(brol); }, 0); }, WasmWebService_PostAsync: function(callableSuccess, callableFailure, url, headersInJsonString, body, bodySize, payload, timeoutInSeconds) { var xhr = new XMLHttpRequest(); var url_ = UTF8ToString(url); var headersInJsonString_ = UTF8ToString(headersInJsonString); xhr.open('POST', url_, true); xhr.timeout = timeoutInSeconds * 1000; xhr.responseType = 'arraybuffer'; xhr.setRequestHeader('Content-type', 'application/octet-stream'); var headers = JSON.parse(headersInJsonString_); for (var key in headers) { xhr.setRequestHeader(key, headers[key]); } xhr.onreadystatechange = function() { if (this.readyState == XMLHttpRequest.DONE) { if (xhr.status === 200) { var s = xhr.getAllResponseHeaders(); var headers = _malloc(s.length + 1); stringToUTF8(s, headers, s.length + 1); WasmWebService_NotifySuccess(callableSuccess, url_, new Uint8Array(this.response), this.response.byteLength, headers, payload); } else { WasmWebService_NotifyError(callableFailure, url_, payload); } } } xhr.send(new Uint8ClampedArray(HEAPU8.buffer, body, bodySize)); }, WasmWebService_DeleteAsync: function(callableSuccess, callableFailure, url, headersInJsonString, payload, timeoutInSeconds) { var xhr = new XMLHttpRequest(); var url_ = UTF8ToString(url); var headersInJsonString_ = UTF8ToString(headersInJsonString); xhr.open('DELETE', url_, true); xhr.timeout = timeoutInSeconds * 1000; xhr.responseType = 'arraybuffer'; xhr.setRequestHeader('Content-type', 'application/octet-stream'); var headers = JSON.parse(headersInJsonString_); for (var key in headers) { xhr.setRequestHeader(key, headers[key]); } xhr.onreadystatechange = function() { if (this.readyState == XMLHttpRequest.DONE) { if (xhr.status === 200) { var s = xhr.getAllResponseHeaders(); var headers = _malloc(s.length + 1); stringToUTF8(s, headers, s.length + 1); WasmWebService_NotifySuccess(callableSuccess, url_, new Uint8Array(this.response), this.response.byteLength, headers, payload); } else { WasmWebService_NotifyError(callableFailure, url_, payload); } } } xhr.send(); } });