diff --git a/server/Turtle.js b/server/Turtle.js index f67acb8..dce84e6 100644 --- a/server/Turtle.js +++ b/server/Turtle.js @@ -358,6 +358,10 @@ export class Turtle extends EventEmitter { // Set up timeout const timer = setTimeout(() => { + const pending = this._pendingCommands.get(uuid); + if (pending) { + console.warn(`[Turtle ${this.id}] ⏰ Command timed out uuid:${uuid.substring(0, 8)} (pending: ${this._pendingCommands.size}, code: ${luaCode.substring(0, 50)})`); + } this._pendingCommands.delete(uuid); reject(new Error(`Command timed out after ${timeout}ms`)); }, timeout); diff --git a/server/server.js b/server/server.js index 5ddf14a..7319ed2 100644 --- a/server/server.js +++ b/server/server.js @@ -228,6 +228,7 @@ function pushCommandToBridge(turtleID, command) { const turtle = turtles.get(turtleID); if (turtle) { turtle.pendingCommands.push({ ...command, timestamp: Date.now() }); + console.log(`[Bridge] Queued command for T#${turtleID} via HTTP poll (no WS bridge, ${bridgeClients.size} bridges)`); } } } @@ -251,6 +252,12 @@ wss.on('connection', (ws, req) => { try { const data = JSON.parse(raw); + // Handle keepalive pings from bridge + if (data.type === 'ping') { + ws.send(JSON.stringify({ type: 'pong' })); + return; + } + if (data.type === 'status') { // Turtle status update forwarded from bridge const turtleID = data.turtleID;