Skip to content

Commit 563f5ab

Browse files
Fix ws reception in browser
1 parent 8b4f88a commit 563f5ab

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed
Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import program from '../.pio/build/browser/program.mjs';
1+
import program from "../.pio/build/browser/program.mjs";
22

33
program()
44
.then(({ Luos_Init, Led_Init, Luos_Loop, Led_Loop, Ws_Init, Ws_Loop }) => {
@@ -12,15 +12,11 @@ program()
1212
Led_Loop();
1313
};
1414

15-
return new Promise(() =>
16-
typeof window !== 'undefined'
17-
? requestAnimationFrame(mainLoop)
18-
: setInterval(mainLoop, 0),
19-
);
15+
return new Promise(() => setInterval(mainLoop, 10));
2016
})
2117
.catch((err) => {
22-
console.error('Error', err);
23-
if (typeof window === 'undefined') {
18+
console.error("Error", err);
19+
if (typeof window === "undefined") {
2420
process.exit(-1);
2521
}
2622
});

network/ws_network/HAL/BROWSER/ws_hal.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,10 @@ void WsHAL_ReceptionWeb(const std::vector<uint8_t> &data)
6868
clientWebsocket->send(arrayBufferView);
6969
}
7070

71-
[[cheerp::genericjs]] void WsHAL_AddWsEventHandlers() {
71+
[[cheerp::genericjs]] void WsHAL_AddWsEventHandlers()
72+
{
7273
clientWebsocket = new WebSocket(s_url);
74+
clientWebsocket->set_binaryType("arraybuffer");
7375
clientWebsocket->addEventListener(
7476
"open",
7577
cheerp::Callback(openEventCallback));
@@ -81,31 +83,31 @@ void WsHAL_ReceptionWeb(const std::vector<uint8_t> &data)
8183
cheerp::Callback(errorEventCallback));
8284
clientWebsocket->addEventListener(
8385
"message",
84-
cheerp::Callback([](MessageEvent *e) {
85-
auto *dataArray = (Uint8Array *)e->get_data();
86+
cheerp::Callback([](MessageEvent *e)
87+
{
88+
auto *dataBuffer = (ArrayBuffer *)e->get_data();
89+
auto *dataArray = new Uint8Array(dataBuffer);
8690
std::vector<uint8_t> wasmData(dataArray->get_length());
8791
Uint8Array *wasmDataArray = cheerp::MakeTypedArray(wasmData.data(), wasmData.size());
8892
wasmDataArray->set(dataArray);
8993
WsHAL_ReceptionWeb(wasmData);
90-
}));
9194
}
9295

9396
[[cheerp::genericjs]] void WsHAL_InitWeb()
9497
{
9598
bool isBrowser;
9699
__asm__("typeof %1 !== 'undefined'" : "=r"(isBrowser) : "r"(&client::window));
97-
if (isBrowser) {
100+
if (isBrowser)
101+
{
98102
WsHAL_AddWsEventHandlers();
99103
}
100104
else
101105
{
102106
client::import("ws")
103-
->then(cheerp::Callback([](client::Object *lib) {
104-
__asm__("globalThis.WebSocket=%0.WebSocket" ::"r"(lib));
105-
}))
106-
->then(cheerp::Callback([]() {
107-
WsHAL_AddWsEventHandlers();
108-
}));
107+
->then(cheerp::Callback([](client::Object *lib)
108+
{ __asm__("globalThis.WebSocket=%0.WebSocket" ::"r"(lib)); }))
109+
->then(cheerp::Callback([]()
110+
{ WsHAL_AddWsEventHandlers(); }));
109111
}
110112
}
111113

0 commit comments

Comments
 (0)