rentgendroid/http_server/code/screenshot.mjs
migueldar 40cb7397b0 fixed mutiple issues, specified socket protocol and cleaned code
Summary:
Issues fixed:

- ipv6 in pre_android container
- frontend was detecting drags when clicking out of screen
- frontend was registering clicks when clicking out of screen

Reviewers: #testers, kuba-orlik

Reviewed By: #testers, kuba-orlik

Maniphest Tasks: T2976

Differential Revision: https://hub.sealcode.org/D1568
2025-01-23 19:25:13 +01:00

62 lines
1.5 KiB
JavaScript

import net from "net";
import fs from "fs";
import { sleep } from "./utils.mjs";
export const socket_client = net.createConnection({ port: 3000, host: "android" });
let doneWrite = 0;
let screenshotPromise = null;
async function screenshot() {
const time_start = Date.now();
socket_client.write("screenshot");
while (!doneWrite) {
await sleep(15);
if (Date.now() - time_start > 2000) {
console.error("Screenshot timed out after 2s");
break; // timeout
}
}
doneWrite = 0;
screenshotPromise = null;
}
export async function guardedScreenshot() {
console.log("Requesting a screenshot");
if (!screenshotPromise) {
console.log("no ongoing promise, starting a new one");
screenshotPromise = screenshot();
}
return screenshotPromise;
}
export async function waitFullBoot() {
var start = performance.now();
var counter = 0;
//will timeout after 10 min
while (performance.now() - start < 600 * 1000) {
var before = performance.now();
await screenshot();
var after = performance.now();
if (after - before < process.env.screenshotDelayMs) counter++;
else counter = 0;
if (counter === 10) return;
}
throw new Error("wait for screenshot time to be less than 0.5s timed out");
}
let fd;
socket_client.on("data", (dataBuf) => {
if (dataBuf.toString() === "start")
fd = fs.openSync("/code/screenshot.png", "w");
else {
if (dataBuf.toString().includes("ENDOFMSG")) {
fs.writeSync(fd, dataBuf);
fs.close(fd);
doneWrite = 1;
} else fs.writeSync(fd, dataBuf);
}
});