rentgendroid/http_server/code/screenshot.mjs
Andrii Dokhniak 18541a6647 Switch to httptoolkit
Summary: switch to httptoolkit

Reviewers: kuba-orlik

Reviewed By: kuba-orlik

Differential Revision: https://hub.sealcode.org/D1578
2025-04-07 21:19:15 +02:00

70 lines
1.6 KiB
JavaScript

import fs from "fs";
import { sleep } from "./utils.mjs";
import { WebSocket } from "ws";
export const android_websocket = new WebSocket("ws://android:3000");
let doneWrite = 0;
let screenshotPromise = null;
async function screenshot() {
const time_start = Date.now();
let retries = 0;
while (android_websocket.readyState != WebSocket.OPEN) {
await sleep(15);
retries++;
if (retries > 50)
{
console.error("Screenshot ws timeout");
doneWrite = 0;
screenshotPromise = null;
return ;
}
}
android_websocket.send("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() {
if (!screenshotPromise) {
screenshotPromise = screenshot();
} else {
console.log("ongoing screenshot promise not taking a new one");
}
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");
}
android_websocket.on("message", (dataBuf) => {
let fd;
fd = fs.openSync("/code/screenshot.png", "w");
fs.writeSync(fd, dataBuf);
fs.close(fd);
doneWrite = 1;
});