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