Mercurial > hg > orthanc-stone
annotate Platforms/Wasm/wasm-application-runner.ts @ 299:3897f9f28cfa am-callable-and-promise
backup work in progress: updated messaging framework with ICallable
author | am@osimis.io |
---|---|
date | Fri, 14 Sep 2018 16:44:01 +0200 |
parents | 2038d76bf13f |
children | ed1a4302154f |
rev | line source |
---|---|
287 | 1 ///<reference path='stone-framework-loader.ts'/> |
2 ///<reference path='wasm-viewport.ts'/> | |
3 | |
4 if (!('WebAssembly' in window)) { | |
5 alert('Sorry, your browser does not support WebAssembly :('); | |
6 } | |
7 | |
8 declare var StoneFrameworkModule : Stone.Framework; | |
9 | |
10 // global functions | |
11 var WasmWebService_NotifyError: Function = null; | |
12 var WasmWebService_NotifySuccess: Function = null; | |
299
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
287
diff
changeset
|
13 var WasmWebService_NewNotifyError: Function = null; |
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
287
diff
changeset
|
14 var WasmWebService_NewNotifySuccess: Function = null; |
287 | 15 var WasmWebService_SetBaseUri: Function = null; |
16 var NotifyUpdateContent: Function = null; | |
17 var SetStartupParameter: Function = null; | |
18 var CreateWasmApplication: Function = null; | |
19 var CreateCppViewport: Function = null; | |
20 var ReleaseCppViewport: Function = null; | |
21 var StartWasmApplication: Function = null; | |
22 var SendMessageToStoneApplication: Function = null; | |
23 | |
24 | |
25 function UpdateContentThread() { | |
26 if (NotifyUpdateContent != null) { | |
27 NotifyUpdateContent(); | |
28 } | |
29 | |
30 setTimeout(UpdateContentThread, 100); // Update the viewport content every 100ms if need be | |
31 } | |
32 | |
33 | |
34 function GetUriParameters() { | |
35 var parameters = window.location.search.substr(1); | |
36 | |
37 if (parameters != null && | |
38 parameters != '') { | |
39 var result = {}; | |
40 var tokens = parameters.split('&'); | |
41 | |
42 for (var i = 0; i < tokens.length; i++) { | |
43 var tmp = tokens[i].split('='); | |
44 if (tmp.length == 2) { | |
45 result[tmp[0]] = decodeURIComponent(tmp[1]); | |
46 } | |
47 } | |
48 | |
49 return result; | |
50 } | |
51 else { | |
52 return {}; | |
53 } | |
54 } | |
55 | |
56 // function UpdateWebApplication(statusUpdateMessage: string) { | |
57 // console.log(statusUpdateMessage); | |
58 // } | |
59 | |
60 function _InitializeWasmApplication(canvasId: string, orthancBaseUrl: string): void { | |
61 | |
62 /************************************** */ | |
63 CreateWasmApplication(); | |
64 WasmWebService_SetBaseUri(orthancBaseUrl); | |
65 | |
66 | |
67 // parse uri and transmit the parameters to the app before initializing it | |
68 var parameters = GetUriParameters(); | |
69 | |
70 for (var key in parameters) { | |
71 if (parameters.hasOwnProperty(key)) { | |
72 SetStartupParameter(key, parameters[key]); | |
73 } | |
74 } | |
75 | |
76 StartWasmApplication(); | |
77 /************************************** */ | |
78 | |
79 UpdateContentThread(); | |
80 } | |
81 | |
82 function InitializeWasmApplication(wasmModuleName: string, orthancBaseUrl: string) { | |
83 | |
84 Stone.Framework.Configure(wasmModuleName); | |
85 | |
86 // Wait for the Orthanc Framework to be initialized (this initializes | |
87 // the WebAssembly environment) and then, create and initialize the Wasm application | |
88 Stone.Framework.Initialize(true, function () { | |
89 | |
90 console.log("Connecting C++ methods to JS methods"); | |
91 | |
92 SetStartupParameter = StoneFrameworkModule.cwrap('SetStartupParameter', null, ['string', 'string']); | |
93 CreateWasmApplication = StoneFrameworkModule.cwrap('CreateWasmApplication', null, ['number']); | |
94 CreateCppViewport = StoneFrameworkModule.cwrap('CreateCppViewport', 'number', []); | |
95 ReleaseCppViewport = StoneFrameworkModule.cwrap('ReleaseCppViewport', null, ['number']); | |
96 StartWasmApplication = StoneFrameworkModule.cwrap('StartWasmApplication', null, ['number']); | |
97 | |
98 WasmWebService_NotifySuccess = StoneFrameworkModule.cwrap('WasmWebService_NotifySuccess', null, ['number', 'string', 'array', 'number', 'number']); | |
99 WasmWebService_NotifyError = StoneFrameworkModule.cwrap('WasmWebService_NotifyError', null, ['number', 'string', 'number']); | |
299
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
287
diff
changeset
|
100 WasmWebService_NewNotifySuccess = StoneFrameworkModule.cwrap('WasmWebService_NewNotifySuccess', null, ['number', 'string', 'array', 'number', 'number']); |
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
287
diff
changeset
|
101 WasmWebService_NewNotifyError = StoneFrameworkModule.cwrap('WasmWebService_NewNotifyError', null, ['number', 'string', 'number']); |
287 | 102 WasmWebService_SetBaseUri = StoneFrameworkModule.cwrap('WasmWebService_SetBaseUri', null, ['string']); |
103 NotifyUpdateContent = StoneFrameworkModule.cwrap('NotifyUpdateContent', null, []); | |
104 | |
105 SendMessageToStoneApplication = StoneFrameworkModule.cwrap('SendMessageToStoneApplication', 'string', ['string']); | |
106 | |
107 console.log("Connecting C++ methods to JS methods - done"); | |
108 | |
109 // Prevent scrolling | |
110 document.body.addEventListener('touchmove', function (event) { | |
111 event.preventDefault(); | |
112 }, false); | |
113 | |
114 _InitializeWasmApplication("canvas", orthancBaseUrl); | |
115 }); | |
116 } |