From cbd3dee0dde454080180d436292507ac5e05cbbc Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Wed, 13 Mar 2019 23:13:02 -0700 Subject: [PATCH] feat: prevent machine from sleeping while plotting --- package-lock.json | 23 +++++++++++++++++++++++ package.json | 1 + src/global.d.ts | 1 + src/server.ts | 34 +++++++++++++++++++++------------- tsconfig.json | 3 ++- 5 files changed, 48 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa63e3d..756adb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2546,6 +2546,11 @@ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -6778,6 +6783,24 @@ "indexof": "0.0.1" } }, + "wake-lock": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/wake-lock/-/wake-lock-0.2.0.tgz", + "integrity": "sha512-jQ7T9MHvng8LGGK57eTGvQVdUMXHtAwdv2YUFa7hVAUOH1XvHz6FREe6G7S7gukfogQXje68HLjkvCIEIhkgXg==", + "requires": { + "bindings": "^1.5.0" + }, + "dependencies": { + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + } + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", diff --git a/package.json b/package.json index 99fa17f..8f96ddf 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "cors": "^2.8.5", "express": "^4.16.4", "serialport": "^7.1.3", + "wake-lock": "^0.2.0", "ws": "^6.1.3", "yargs": "^12.0.5" }, diff --git a/src/global.d.ts b/src/global.d.ts index bff9471..6fc14aa 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1 +1,2 @@ declare module '*.svg'; +declare module 'wake-lock'; diff --git a/src/server.ts b/src/server.ts index 62b6b1c..0fd1103 100644 --- a/src/server.ts +++ b/src/server.ts @@ -2,6 +2,7 @@ import cors from "cors"; import express from "express"; import http from "http"; import path from "path"; +import { WakeLock } from "wake-lock"; import WebSocket from "ws"; import { EBB } from "./ebb"; import { Device, PenMotion, Plan } from "./planning"; @@ -49,22 +50,29 @@ export function startServer(port: number, device: string | null = null, enableCo }); }); - app.post("/plot", (req, res) => { + app.post("/plot", async (req, res) => { const plan = Plan.deserialize(req.body); console.log(`Received plan of estimated duration ${formatDuration(plan.duration())}`); - if (ebb != null) { - console.log("Beginning plot..."); - const begin = Date.now(); - doPlot(plan).then(() => { - const end = Date.now(); - console.log(`Plot took ${formatDuration((end - begin) / 1000)}`); - }); - } else { - simulatePlot(plan).then(() => { - console.log("Simulation complete"); - }); - } + console.log(ebb != null ? "Beginning plot..." : "Simulating plot..."); res.status(200).end(); + + const begin = Date.now(); + let wakeLock: any; + try { + wakeLock = new WakeLock("saxi plotting"); + } catch (e) { + console.warn("Couldn't acquire wake lock. Ensure your machine does not sleep during plotting"); + } + + try { + await (ebb != null ? doPlot(plan) : simulatePlot(plan)); + const end = Date.now(); + console.log(`Plot took ${formatDuration((end - begin) / 1000)}`); + } finally { + if (wakeLock) { + wakeLock.release(); + } + } }); app.post("/cancel", (req, res) => { diff --git a/tsconfig.json b/tsconfig.json index a1222f1..f2f5c9b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,7 @@ } }, "files": [ - "src/cli.ts" + "src/cli.ts", + "src/global.d.ts" ] }