Mercurial > hg > orthanc-stone
changeset 831:d71cf8504159
handling of GET arguments
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 31 May 2019 10:30:22 +0200 |
parents | 171a486a0373 |
children | c51b12fb4f34 |
files | Framework/Oracle/WebAssemblyOracle.cpp Framework/Oracle/WebAssemblyOracle.h Samples/WebAssembly/BasicMPR.cpp Samples/WebAssembly/BasicMPR.html Samples/WebAssembly/CMakeLists.txt Samples/WebAssembly/app.js |
diffstat | 6 files changed, 85 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/Framework/Oracle/WebAssemblyOracle.cpp Fri May 31 09:12:05 2019 +0200 +++ b/Framework/Oracle/WebAssemblyOracle.cpp Fri May 31 10:30:22 2019 +0200 @@ -279,7 +279,7 @@ void SetUri(const std::string& uri) { - uri_ = uri; + uri_ = oracle_.orthancRoot_ + uri; } void SetBody(std::string& body /* will be swapped */)
--- a/Framework/Oracle/WebAssemblyOracle.h Fri May 31 09:12:05 2019 +0200 +++ b/Framework/Oracle/WebAssemblyOracle.h Fri May 31 10:30:22 2019 +0200 @@ -59,11 +59,18 @@ void Execute(const IObserver& receiver, GetOrthancWebViewerJpegCommand* command); + std::string orthancRoot_; + public: WebAssemblyOracle(MessageBroker& broker) : IObservable(broker) { } + + void SetOrthancRoot(const std::string& root) + { + orthancRoot_ = root; + } virtual void Schedule(const IObserver& receiver, IOracleCommand* command);
--- a/Samples/WebAssembly/BasicMPR.cpp Fri May 31 09:12:05 2019 +0200 +++ b/Samples/WebAssembly/BasicMPR.cpp Fri May 31 10:30:22 2019 +0200 @@ -318,7 +318,27 @@ } }; - static TestSleep testSleep(broker_, oracle_); + //static TestSleep testSleep(broker_, oracle_); +} + + + +static std::map<std::string, std::string> arguments_; + +static bool GetArgument(std::string& value, + const std::string& key) +{ + std::map<std::string, std::string>::const_iterator found = arguments_.find(key); + + if (found == arguments_.end()) + { + return false; + } + else + { + value = found->second; + return true; + } } @@ -333,10 +353,20 @@ } EMSCRIPTEN_KEEPALIVE + void SetArgument(const char* key, const char* value) + { + // This is called for each GET argument (cf. "app.js") + LOG(INFO) << "Received GET argument: [" << key << "] = [" << value << "]"; + arguments_[key] = value; + } + + EMSCRIPTEN_KEEPALIVE void Initialize() { try { + oracle_.SetOrthancRoot(".."); + loader_.reset(new OrthancStone::OrthancSeriesVolumeProgressiveLoader(ct_, oracle_, oracle_)); widget1_.reset(new OrthancStone::VolumeSlicerWidget(broker_, "mycanvas1", OrthancStone::VolumeProjection_Axial)); @@ -362,7 +392,17 @@ emscripten_request_animation_frame_loop(OnAnimationFrame, NULL); - loader_->LoadSeries("a04ecf01-79b2fc33-58239f7e-ad9db983-28e81afa"); + + std::string ct; + if (GetArgument(ct, "ct")) + { + //loader_->LoadSeries("a04ecf01-79b2fc33-58239f7e-ad9db983-28e81afa"); + loader_->LoadSeries(ct); + } + else + { + LOG(ERROR) << "No Orthanc identifier for the CT series was provided"; + } } catch (Orthanc::OrthancException& e) {
--- a/Samples/WebAssembly/BasicMPR.html Fri May 31 09:12:05 2019 +0200 +++ b/Samples/WebAssembly/BasicMPR.html Fri May 31 10:30:22 2019 +0200 @@ -54,16 +54,7 @@ <canvas id="mycanvas2" oncontextmenu="return false;"></canvas> <canvas id="mycanvas3" oncontextmenu="return false;"></canvas> - <script type="text/javascript"> - if (!('WebAssembly' in window)) { - alert('Sorry, your browser does not support WebAssembly :('); - } else { - window.addEventListener('WebAssemblyLoaded', function() { - Module.ccall('Initialize', null, null, null); - }); - } - </script> - + <script type="text/javascript" src="app.js"></script> <script type="text/javascript" async src="BasicMPR.js"></script> </body> </html>
--- a/Samples/WebAssembly/CMakeLists.txt Fri May 31 09:12:05 2019 +0200 +++ b/Samples/WebAssembly/CMakeLists.txt Fri May 31 10:30:22 2019 +0200 @@ -105,6 +105,7 @@ ${CMAKE_SOURCE_DIR}/BasicMPR.html ${CMAKE_SOURCE_DIR}/BasicScene.html ${CMAKE_SOURCE_DIR}/Configuration.json + ${CMAKE_SOURCE_DIR}/app.js ${CMAKE_SOURCE_DIR}/index.html DESTINATION ${CMAKE_INSTALL_PREFIX} )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Samples/WebAssembly/app.js Fri May 31 10:30:22 2019 +0200 @@ -0,0 +1,33 @@ +/** + * This is a generic bootstrap code that is shared by all the Stone + * sample applications. + **/ + +// Check support for WebAssembly +if (!('WebAssembly' in window)) { + alert('Sorry, your browser does not support WebAssembly :('); +} else { + + // Wait for the module to be loaded (the event "WebAssemblyLoaded" + // must be emitted by the "main" function) + window.addEventListener('WebAssemblyLoaded', function() { + + // Loop over the GET arguments + var parameters = window.location.search.substr(1); + if (parameters != null && parameters != '') { + var tokens = parameters.split('&'); + for (var i = 0; i < tokens.length; i++) { + var arg = tokens[i].split('='); + if (arg.length == 2) { + + // Send each GET argument to WebAssembly + Module.ccall('SetArgument', null, [ 'string', 'string' ], + [ arg[0], decodeURIComponent(arg[1]) ]); + } + } + } + + // Inform the WebAssembly module that it can start + Module.ccall('Initialize', null, null, null); + }); +}