36#ifndef _UTILS_JSWEBSOCKETCLIENT_HXX_
37#define _UTILS_JSWEBSOCKETCLIENT_HXX_
41#include <emscripten.h>
42#include <emscripten/val.h>
47class JSWebsocketClient
50 JSWebsocketClient(
CanHubFlow* hflow,
string server_js)
52 string script =
"Module.ws_server = " + server_js +
";\n";
53 emscripten_run_script(script.c_str());
56 var server_address = Module.ws_server;
58 var WS = window.WebSocket || window.MozWebSocket;
60 var WS = require(
'websocket').w3cwebsocket;
69 reconnect = function() {
70 console.log(
'NNNN connecting to ws server: ', server_address);
71 var connection =
new WS(server_address);
73 var client_port =
new Module.JSHubPort($0,
76 var json = JSON.stringify(
77 {type :
'gc_can_frame', data : gc_text});
78 if (connection.readyState == 1) {
79 connection.send(json);
81 console.log(
'Not sending frame ', gc_text,
82 ' because connection',portnum,
'state = ',
83 connection.readyState);
86 portnum = client_port.get_port_num();
87 connection.onopen = function() {
88 console.log(
'ws connection',portnum,
'established. starting stack.');
92 if (e ===
'SimulateInfiniteLoop') {
93 console.log(
'stack started.');
95 console.log(
'unknown exception ', e);
100 connection.onerror = function (eee) {
101 console.log(
'Connection',portnum,
'error: ', eee);
106 connection.onclose = function () {
107 console.log(
'Websocket',portnum,
'closed.');
108 client_port.abandon();
111 console.log(
'Scheduling reconnect.');
112 setTimeout(reconnect, 1000);
114 connection.onmessage = function(message) {
117 var json = JSON.parse(message.data);
122 'This doesnt look like a valid JSON: ',
126 if (json.type ===
'gc_can_frame')
129 client_port.recv(json.data);
131 console.log(
'Received data of unknown type: ',
137 }, (
unsigned long)canHub_);