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}`);