Mercurial > hg > orthanc-stone
comparison Deprecated/Resources/CodeGeneration/testWasmIntegrated/testWasmIntegrated.ts @ 1401:f6a2d46d2b76
moved CodeGeneration into Deprecated
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Wed, 29 Apr 2020 20:48:18 +0200 |
parents | Resources/CodeGeneration/testWasmIntegrated/testWasmIntegrated.ts@f185cfcb72a0 |
children |
comparison
equal
deleted
inserted
replaced
1400:419d0320c344 | 1401:f6a2d46d2b76 |
---|---|
1 var SendMessageToCpp: Function = null; | |
2 export var TestWasmIntegratedModule : any; | |
3 | |
4 import * as TestStoneCodeGen from './build-wasm/TestStoneCodeGen_generated' | |
5 | |
6 /* | |
7 +--------------------------------------------------+ | |
8 | install emscripten handlers | | |
9 +--------------------------------------------------+ | |
10 */ | |
11 | |
12 // (<any> window).Module = { | |
13 // preRun: [ | |
14 // function() { | |
15 // console.log('Loading the Stone Framework using WebAssembly'); | |
16 // } | |
17 // ], | |
18 // postRun: [ | |
19 // function() { | |
20 // // This function is called by ".js" wrapper once the ".wasm" | |
21 // // WebAssembly module has been loaded and compiled by the | |
22 // // browser | |
23 // console.log('WebAssembly is ready'); | |
24 // // window.SendMessageToCpp = (<any> window).Module.cwrap('SendMessageToCpp', 'string', ['string']); | |
25 // // window.SendFreeTextToCpp = (<any> window).Module.cwrap('SendFreeTextToCpp', 'string', ['string']); | |
26 // } | |
27 // ], | |
28 // print: function(text : string) { | |
29 // console.log(text); | |
30 // }, | |
31 // printErr: function(text : string) { | |
32 // console.error(text); | |
33 // }, | |
34 // totalDependencies: 0 | |
35 // }; | |
36 | |
37 /* | |
38 +--------------------------------------------------+ | |
39 | install handlers | | |
40 +--------------------------------------------------+ | |
41 */ | |
42 document.querySelectorAll(".TestWasm-button").forEach((e) => { | |
43 (e as HTMLButtonElement).addEventListener("click", () => { | |
44 ButtonClick(e.attributes["tool-selector"].value); | |
45 }); | |
46 }); | |
47 | |
48 /* | |
49 +--------------------------------------------------+ | |
50 | define stock messages | | |
51 +--------------------------------------------------+ | |
52 */ | |
53 let schemaText: string = null; | |
54 fetch("testTestStoneCodeGen.yaml").then(function(res) {return res.text();}).then(function(text) {schemaText = text;}); | |
55 | |
56 let stockSerializedMessages = new Map<string,string>(); | |
57 stockSerializedMessages["Test CppHandler message2"] = null; | |
58 fetch("cppHandler_test_Message2.json").then(function(res) {return res.text();}).then(function(text) {stockSerializedMessages["Test CppHandler message2"] = text;}); | |
59 | |
60 stockSerializedMessages["Test 2"] = ` { | |
61 "type" : "TestStoneCodeGen.Message1", | |
62 "value" : { | |
63 "memberInt32" : -987, | |
64 "memberString" : "Salomé", | |
65 "memberEnumMonth" : "March", | |
66 "memberBool" : true, | |
67 "memberFloat32" : 0.1, | |
68 "memberFloat64" : -0.2, | |
69 "extraMember" : "don't care" | |
70 } | |
71 }`; | |
72 stockSerializedMessages["Test 3"] = "Test 3 stock message sdfsfsdfsdf"; | |
73 stockSerializedMessages["Test 4"] = "Test 4 stock message 355345345"; | |
74 stockSerializedMessages["Test 5"] = "Test 5 stock message 34535"; | |
75 stockSerializedMessages["Test 6"] = "Test 6 stock message xcvcxvx"; | |
76 stockSerializedMessages["Test 7"] = "Test 7 stock message fgwqewqdgg"; | |
77 stockSerializedMessages["Test 8"] = "Test 8 stock message fgfsdfsdgg"; | |
78 | |
79 /* | |
80 +--------------------------------------------------+ | |
81 | define handler | | |
82 +--------------------------------------------------+ | |
83 */ | |
84 | |
85 function setSerializedInputValue(text: string) { | |
86 let e : HTMLTextAreaElement = document.getElementById('TestWasm-SerializedInput') as HTMLTextAreaElement; | |
87 e.value = text; | |
88 } | |
89 | |
90 function getSerializedInputValue(): string { | |
91 let e : HTMLTextAreaElement = document.getElementById('TestWasm-SerializedInput') as HTMLTextAreaElement; | |
92 return e.value; | |
93 } | |
94 | |
95 function setCppOutputValue(text: string) { | |
96 let e : HTMLTextAreaElement = document.getElementById('TestWasm-CppOutput') as HTMLTextAreaElement; | |
97 e.value = text; | |
98 } | |
99 | |
100 function getCppOutputValue(): string { | |
101 let e : HTMLTextAreaElement = document.getElementById('TestWasm-CppOutput') as HTMLTextAreaElement; | |
102 return e.value; | |
103 } | |
104 | |
105 function SendFreeTextFromCpp(txt: string):string | |
106 { | |
107 setCppOutputValue(getCppOutputValue() + "\n" + txt); | |
108 return ""; | |
109 } | |
110 (<any> window).SendFreeTextFromCpp = SendFreeTextFromCpp; | |
111 | |
112 var referenceMessages = Array<any>(); | |
113 | |
114 function testTsCppTs() { | |
115 var r = new TestStoneCodeGen.Message2(); | |
116 r.memberEnumMovieType = TestStoneCodeGen.MovieType.RomCom; | |
117 r.memberStringWithDefault = "overriden"; | |
118 r.memberMapEnumFloat[TestStoneCodeGen.CrispType.CreamAndChives] = 0.5; | |
119 r.memberString = "reference-messsage2-test1"; | |
120 | |
121 referenceMessages[r.memberString] = r; | |
122 var strMsg2 = r.StoneSerialize(); | |
123 let SendMessageToCppForEchoLocal = (<any> window).Module.cwrap('SendMessageToCppForEcho', 'string', ['string']); | |
124 SendMessageToCppForEchoLocal(strMsg2); | |
125 } | |
126 | |
127 class MyEchoHandler implements TestStoneCodeGen.IHandler | |
128 { | |
129 public HandleMessage2(value: TestStoneCodeGen.Message2): boolean | |
130 { | |
131 if (value.memberString in referenceMessages) { | |
132 let r = referenceMessages[value.memberString]; | |
133 let equals = (value.memberStringWithDefault == r.memberStringWithDefault); | |
134 if (TestStoneCodeGen.CrispType.CreamAndChives in r.memberMapEnumFloat) { | |
135 equals == equals && r.memberMapEnumFloat[TestStoneCodeGen.CrispType.CreamAndChives] == value.memberMapEnumFloat[TestStoneCodeGen.CrispType.CreamAndChives]; | |
136 } | |
137 // TODO continue comparison | |
138 | |
139 if (equals) { | |
140 console.log("objects are equals after round trip"); | |
141 return true; | |
142 } | |
143 } | |
144 console.log("problem after round trip"); | |
145 return true; | |
146 } | |
147 } | |
148 | |
149 function SendMessageFromCpp(txt: string):string | |
150 { | |
151 setCppOutputValue(getCppOutputValue() + "\n" + txt); | |
152 TestStoneCodeGen.StoneDispatchToHandler(txt, new MyEchoHandler()); | |
153 return ""; | |
154 } | |
155 (<any> window).SendMessageFromCpp = SendMessageFromCpp; | |
156 | |
157 | |
158 | |
159 function ButtonClick(buttonName: string) { | |
160 if (buttonName.startsWith('Test ')) { | |
161 setSerializedInputValue(stockSerializedMessages[buttonName]); | |
162 } | |
163 else if (buttonName == "Test-ts-cpp-ts") { | |
164 testTsCppTs(); | |
165 } | |
166 else if(buttonName == 'Trigger') | |
167 { | |
168 let serializedInputValue:string = getSerializedInputValue(); | |
169 | |
170 let SendMessageToCppLocal = (<any> window).Module.cwrap('SendMessageToCpp', 'string', ['string']); | |
171 SendMessageToCppLocal(serializedInputValue); | |
172 } | |
173 else if(buttonName == 'Clear') | |
174 { | |
175 setCppOutputValue(""); | |
176 } | |
177 else if(buttonName == 'ShowSchema') | |
178 { | |
179 setCppOutputValue(schemaText); | |
180 } | |
181 else | |
182 { | |
183 throw new Error("Internal error!"); | |
184 } | |
185 } | |
186 | |
187 | |
188 | |
189 // this method is called "from the C++ code" when the StoneApplication is updated. | |
190 // it can be used to update the UI of the application | |
191 function UpdateWebApplicationWithString(statusUpdateMessageString: string) { | |
192 console.log("updating web application (string): ", statusUpdateMessageString); | |
193 let statusUpdateMessage = JSON.parse(statusUpdateMessageString); | |
194 | |
195 if ("event" in statusUpdateMessage) | |
196 { | |
197 let eventName = statusUpdateMessage["event"]; | |
198 if (eventName == "appStatusUpdated") | |
199 { | |
200 //ui.onAppStatusUpdated(statusUpdateMessage["data"]); | |
201 } | |
202 } | |
203 } | |
204 | |
205 | |
206 function UpdateWebApplicationWithSerializedMessage(statusUpdateMessageString: string) { | |
207 console.log("updating web application (serialized message): ", statusUpdateMessageString); | |
208 console.log("<not supported!>"); | |
209 } | |
210 |