|
|
@@ -1,8 +1,8 @@ |
|
|
|
let http = require("http"); |
|
|
|
let net = require("net"); |
|
|
|
|
|
|
|
let tcpport = process.env["TCPPORT"] ? parseInt(process.env["TCPPORT"]) : 8080; |
|
|
|
let httpport = process.env["HTTPPORT"] ? parseInt(process.env["HTTPPORT"]) : 8081; |
|
|
|
let tcpport = process.env["TCPPORT"] ? parseInt(process.env["TCPPORT"]) : 8099; |
|
|
|
let httpport = process.env["HTTPPORT"] ? parseInt(process.env["HTTPPORT"]) : 8098; |
|
|
|
|
|
|
|
let html = ` |
|
|
|
<!DOCTYPE html> |
|
|
@@ -16,16 +16,33 @@ let html = ` |
|
|
|
<script> |
|
|
|
let img = document.getElementById("image"); |
|
|
|
let url = img.src; |
|
|
|
setInterval(() => { |
|
|
|
|
|
|
|
function refresh() { |
|
|
|
img.onload = wait; |
|
|
|
img.onerror = () => { |
|
|
|
console.error("Load error"); |
|
|
|
setTimeout(refresh, 4000); |
|
|
|
}; |
|
|
|
|
|
|
|
let rand = Math.floor(Math.random() * 1000000); |
|
|
|
img.src = url + "?" + rand; |
|
|
|
}, 1000); |
|
|
|
} |
|
|
|
|
|
|
|
function wait() { |
|
|
|
fetch("/wait").then(refresh).catch(err => { |
|
|
|
console.error("Wait error:", err); |
|
|
|
wait(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
wait(); |
|
|
|
</script> |
|
|
|
</body> |
|
|
|
</html> |
|
|
|
`; |
|
|
|
|
|
|
|
let imgdata = Buffer.alloc(0); |
|
|
|
let waiters = []; |
|
|
|
|
|
|
|
net.createServer(conn => { |
|
|
|
console.log("Connection", conn.remoteAddress); |
|
|
@@ -38,30 +55,40 @@ net.createServer(conn => { |
|
|
|
|
|
|
|
while (true) { |
|
|
|
if (!hasLength && received.length >= 4) { |
|
|
|
expectedLen = received.readInt32LE(0); |
|
|
|
expectedLen = received.readUInt32BE(0); |
|
|
|
received = received.slice(4); |
|
|
|
hasLength = true; |
|
|
|
} |
|
|
|
|
|
|
|
if (hasLength && received.length >= expectedLen + 4) { |
|
|
|
imgdata = received.slice(4, expectedLen + 4); |
|
|
|
received = received.slice(expectedLen + 4); |
|
|
|
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", |
|
|
|
"Refresh": "1", |
|
|
|
}); |
|
|
|
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}`); |