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