let http = require("http"); let net = require("net"); let tcpport = process.env["TCPPORT"] ? parseInt(process.env["TCPPORT"]) : 8099; let httpport = process.env["HTTPPORT"] ? parseInt(process.env["HTTPPORT"]) : 8098; let html = ` XRemoteView `; let imgdata = Buffer.alloc(0); let waiters = []; net.createServer(conn => { console.log("Connection", conn.remoteAddress); received = Buffer.alloc(0); let hasLength = false; let expectedLen = 0; conn.on("data", data => { received = Buffer.concat([received, data]); while (true) { if (!hasLength && received.length >= 4) { expectedLen = received.readUInt32BE(0); received = received.slice(4); hasLength = true; } if (hasLength && received.length >= expectedLen) { imgdata = received.slice(0, expectedLen); received = received.slice(expectedLen); hasLength = false; for (let waiter of waiters) { waiter.end(); } waiters = []; } else { break; } } }); }).on("error", err => console.error(err)).listen(tcpport, "0.0.0.0"); console.log(`TCP listening on 0.0.0.0:${tcpport}`); http.createServer((req, res) => { if (req.url.split("?")[0] == "/image") { res.writeHead(200, { "Content-Type": "image/jpeg", }); res.end(imgdata); } else if (req.url.split("?")[0] == "/wait") { waiters.push(res); } else { res.writeHead(200); res.end(html); } }).listen(httpport, "0.0.0.0"); console.log(`HTTP listening on 0.0.0.0:${httpport}`);