mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-18 22:26:30 +01:00
get mqtt working again
This commit is contained in:
parent
a1d6f25fc6
commit
7efc4b29bf
4 changed files with 77 additions and 21 deletions
|
@ -59,8 +59,8 @@ EM_JS(bool, call_confirm, (const char* str), {
|
||||||
EM_JS(void, call_alert, (const char* str), {
|
EM_JS(void, call_alert, (const char* str), {
|
||||||
alert(UTF8ToString(str));
|
alert(UTF8ToString(str));
|
||||||
});
|
});
|
||||||
EM_JS(void, call_haveDevID, (const char* devid), {
|
EM_JS(void, call_haveDevID, (void* closure, const char* devid), {
|
||||||
onHaveDevID(UTF8ToString(devid));
|
onHaveDevID(closure, UTF8ToString(devid));
|
||||||
});
|
});
|
||||||
|
|
||||||
EM_JS(void, call_mqttSend, (const char* topic, const uint8_t* ptr, int len), {
|
EM_JS(void, call_mqttSend, (const char* topic, const uint8_t* ptr, int len), {
|
||||||
|
@ -135,7 +135,7 @@ initDeviceGlobals( Globals* globals )
|
||||||
XP_UCHAR buf[32];
|
XP_UCHAR buf[32];
|
||||||
XP_SNPRINTF( buf, VSIZE(buf), MQTTDevID_FMT, devID );
|
XP_SNPRINTF( buf, VSIZE(buf), MQTTDevID_FMT, devID );
|
||||||
XP_LOGFF( "got mqtt devID: %s", buf );
|
XP_LOGFF( "got mqtt devID: %s", buf );
|
||||||
call_haveDevID( buf );
|
call_haveDevID( globals, buf );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -157,9 +157,9 @@ startGame( Globals* globals )
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)server_do( globals->game.server, NULL ); /* assign tiles, etc. */
|
(void)server_do( globals->game.server, NULL ); /* assign tiles, etc. */
|
||||||
/* if ( !!globals->game.comms ) { */
|
if ( !!globals->game.comms ) {
|
||||||
/* comms_resendAll( globals->game.comms, NULL, COMMS_CONN_NONE, XP_TRUE ); */
|
comms_resendAll( globals->game.comms, NULL, COMMS_CONN_MQTT, XP_TRUE );
|
||||||
/* } */
|
}
|
||||||
|
|
||||||
updateScreen( globals );
|
updateScreen( globals );
|
||||||
LOG_RETURN_VOID();
|
LOG_RETURN_VOID();
|
||||||
|
@ -184,7 +184,7 @@ makeAndDraw( Globals* globals, bool forceNew, bool p0robot, bool p1robot )
|
||||||
globals->gi.players[0].isLocal = XP_TRUE;
|
globals->gi.players[0].isLocal = XP_TRUE;
|
||||||
globals->gi.players[0].robotIQ = p0robot ? 99 : 0;
|
globals->gi.players[0].robotIQ = p0robot ? 99 : 0;
|
||||||
|
|
||||||
globals->gi.players[1].name = copyString( globals->mpool, "Player 1" );
|
globals->gi.players[1].name = copyString( globals->mpool, "Player 2" );
|
||||||
globals->gi.players[1].isLocal = XP_TRUE;
|
globals->gi.players[1].isLocal = XP_TRUE;
|
||||||
globals->gi.players[1].robotIQ = p1robot ? 99 : 0;
|
globals->gi.players[1].robotIQ = p1robot ? 99 : 0;
|
||||||
|
|
||||||
|
@ -502,11 +502,11 @@ newgame(bool p0, bool p1)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gotMQTTMsg( int len, const uint8_t* msg )
|
gotMQTTMsg( void* closure, int len, const uint8_t* msg )
|
||||||
{
|
{
|
||||||
XP_LOGFF( "got msg of len %d", len );
|
XP_LOGFF( "got msg of len %d (%p vs %p)", len, closure, sGlobals );
|
||||||
|
Globals* globals = (Globals*)closure;
|
||||||
dvc_parseMQTTPacket( sGlobals->dutil, NULL, msg, len );
|
dvc_parseMQTTPacket( globals->dutil, NULL, msg, len );
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<style>
|
<style>
|
||||||
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
||||||
textarea.emscripten { font-family: monospace; width: 80%; }
|
textarea.emscripten { font-family: monospace; width: 80%; }
|
||||||
|
body.centered { text-align: center; }
|
||||||
div.emscripten { text-align: center; }
|
div.emscripten { text-align: center; }
|
||||||
div.emscripten_border { border: 1px solid black; }
|
div.emscripten_border { border: 1px solid black; }
|
||||||
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
||||||
|
@ -46,7 +47,7 @@
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body class="centered">
|
||||||
<hr/>
|
<hr/>
|
||||||
<figure style="overflow:visible;" id="spinner"><div class="spinner"></div><center style="margin-top:0.5em"><strong>emscripten</strong></center></figure>
|
<figure style="overflow:visible;" id="spinner"><div class="spinner"></div><center style="margin-top:0.5em"><strong>emscripten</strong></center></figure>
|
||||||
<div class="emscripten" id="status">Downloading...</div>
|
<div class="emscripten" id="status">Downloading...</div>
|
||||||
|
@ -176,6 +177,10 @@
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
|
var state = {client: null,
|
||||||
|
closure: null,
|
||||||
|
};
|
||||||
|
|
||||||
function callNewGame() {
|
function callNewGame() {
|
||||||
var args = [
|
var args = [
|
||||||
document.getElementById("player0Checked").checked,
|
document.getElementById("player0Checked").checked,
|
||||||
|
@ -183,10 +188,65 @@
|
||||||
]
|
]
|
||||||
Module.ccall('newgame', null, ['boolean', 'boolean'], args);
|
Module.ccall('newgame', null, ['boolean', 'boolean'], args);
|
||||||
}
|
}
|
||||||
function onHaveDevID(devid) {
|
function onHaveDevID(closure, devid) {
|
||||||
console.log('got ' + devid);
|
console.log('got ' + devid);
|
||||||
|
state.closure = closure;
|
||||||
document.getElementById("mqtt_span").textContent=devid;
|
document.getElementById("mqtt_span").textContent=devid;
|
||||||
}
|
|
||||||
|
state.client = new Paho.MQTT.Client("eehouse.org", 8883, '/wss', devid);
|
||||||
|
|
||||||
|
// set callback handlers
|
||||||
|
state.client.onConnectionLost = function onConnectionLost(responseObject) {
|
||||||
|
document.getElementById("mqtt_status").textContent="Disconnected";
|
||||||
|
if (responseObject.errorCode !== 0) {
|
||||||
|
console.log("onConnectionLost:"+responseObject.errorMessage);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
state.client.onMessageArrived = function onMessageArrived(message) {
|
||||||
|
var payload = message.payloadBytes;
|
||||||
|
var length = payload.length;
|
||||||
|
Module.ccall('gotMQTTMsg', null, ['number', 'number', 'array'],
|
||||||
|
[state.closure, length, payload]);
|
||||||
|
};
|
||||||
|
|
||||||
|
function onConnect() {
|
||||||
|
document.getElementById("mqtt_status").textContent="Connected";
|
||||||
|
|
||||||
|
var subscribeOptions = {
|
||||||
|
qos: 2, // QoS
|
||||||
|
// invocationContext: {foo: true}, // Passed to success / failure callback
|
||||||
|
// onSuccess: function() { alert('subscribe succeeded'); },
|
||||||
|
onFailure: function() { alert('subscribe failed'); },
|
||||||
|
timeout: 10,
|
||||||
|
};
|
||||||
|
state.client.subscribe('xw4/device/' + devid, subscribeOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
state.client.connect({mqttVersion: 3,
|
||||||
|
userName: "xwuser",
|
||||||
|
password: "xw4r0cks",
|
||||||
|
useSSL: true,
|
||||||
|
reconnect: true,
|
||||||
|
onSuccess: onConnect,
|
||||||
|
onFailure: function() { alert('onFailure'); },
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function mqttSend (topic, ptr) {
|
||||||
|
if ( null != state.client ) {
|
||||||
|
message = new Paho.MQTT.Message(ptr);
|
||||||
|
message.destinationName = topic;
|
||||||
|
message.qos = 2;
|
||||||
|
state.client.send(message);
|
||||||
|
} else {
|
||||||
|
alert('null client');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let script = document.createElement('script');
|
||||||
|
script.src = "paho-mqtt.js";
|
||||||
|
document.body.appendChild(script);
|
||||||
</script>
|
</script>
|
||||||
{{{ SCRIPT }}}
|
{{{ SCRIPT }}}
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -249,9 +249,9 @@ dict_splitFaces( DictionaryCtxt* dict, XWEnv xwe, const XP_U8* utf8,
|
||||||
XP_ASSERT( !dict->facePtrs );
|
XP_ASSERT( !dict->facePtrs );
|
||||||
dict->facePtrs = ptrs;
|
dict->facePtrs = ptrs;
|
||||||
|
|
||||||
for ( int ii = 0; ii < nFaces; ++ii ) {
|
/* for ( int ii = 0; ii < nFaces; ++ii ) { */
|
||||||
XP_LOGFF( "face %d: %s", ii, dict->facePtrs[ii] );
|
/* XP_LOGFF( "face %d: %s", ii, dict->facePtrs[ii] ); */
|
||||||
}
|
/* } */
|
||||||
} /* dict_splitFaces */
|
} /* dict_splitFaces */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -359,11 +359,7 @@ drawCrosshairs( WasmDrawCtx* wdctx, const XP_Rect* rect, CellFlags flags )
|
||||||
const SDL_Color* color = &sOtherColors[COLOR_FOCUS];
|
const SDL_Color* color = &sOtherColors[COLOR_FOCUS];
|
||||||
if ( 0 != (flags & CELL_CROSSHOR) ) {
|
if ( 0 != (flags & CELL_CROSSHOR) ) {
|
||||||
XP_Rect hairRect = *rect;
|
XP_Rect hairRect = *rect;
|
||||||
XP_LOGFF( "hairRect before: l: %d, t: %d, w: %d, h: %d",
|
|
||||||
hairRect.left, hairRect.top, hairRect.width, hairRect.height );
|
|
||||||
insetRect( &hairRect, 0, hairRect.height / 3 );
|
insetRect( &hairRect, 0, hairRect.height / 3 );
|
||||||
XP_LOGFF( "hairRect after: l: %d, t: %d, w: %d, h: %d",
|
|
||||||
hairRect.left, hairRect.top, hairRect.width, hairRect.height );
|
|
||||||
fillRect( wdctx, &hairRect, color );
|
fillRect( wdctx, &hairRect, color );
|
||||||
}
|
}
|
||||||
if ( 0 != (flags & CELL_CROSSVERT) ) {
|
if ( 0 != (flags & CELL_CROSSVERT) ) {
|
||||||
|
|
Loading…
Reference in a new issue