78 lines
No EOL
1.9 KiB
TypeScript
78 lines
No EOL
1.9 KiB
TypeScript
import EventEmitter from "events";
|
|
import browser from '../src/bun/browser';
|
|
import { tmpdir } from "os";
|
|
import path from "path";
|
|
import { createInterface } from "readline";
|
|
import { Readable } from "stream";
|
|
const events = new EventEmitter();
|
|
const abortController = new AbortController();
|
|
|
|
process.env.WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = "--remote-debugging-port=9222";
|
|
process.env.NODE_ENV = "development";
|
|
|
|
let retries = 0;
|
|
|
|
function spawnServer ()
|
|
{
|
|
const s = Bun.spawn(["bun", '--watch', '--install=fallback', "run", "--inspect=127.0.0.1:9228/fixed-session", "./src/bun/index.ts"], {
|
|
env: {
|
|
...process.env,
|
|
HEADLESS: "true",
|
|
},
|
|
stdout: "pipe",
|
|
stderr: "inherit",
|
|
stdin: "pipe",
|
|
signal: abortController.signal,
|
|
killSignal: 'SIGUSR1',
|
|
onExit (subprocess, exitCode, signalCode)
|
|
{
|
|
if (exitCode === 1 && retries <= 3)
|
|
{
|
|
server = spawnServer();
|
|
retries++;
|
|
} else
|
|
{
|
|
process.exit();
|
|
}
|
|
|
|
}
|
|
});
|
|
const rl = createInterface({ input: Readable.fromWeb(s.stdout as any) });
|
|
rl.on('line', e =>
|
|
{
|
|
if (e === 'focus')
|
|
{
|
|
events.emit('focus');
|
|
} else
|
|
{
|
|
console.log(e);
|
|
}
|
|
});
|
|
return s;
|
|
}
|
|
|
|
function spawnBrowser ()
|
|
{
|
|
try
|
|
{
|
|
|
|
return browser(events, process.env.FORCE_BROWSER === "true", {
|
|
configPath: path.join(tmpdir(), 'gameflow'),
|
|
isSteamDeckGameMode: false
|
|
});
|
|
} catch (error)
|
|
{
|
|
console.error(error);
|
|
};
|
|
}
|
|
|
|
let server = spawnServer();
|
|
if (!process.env.HEADLESS)
|
|
{
|
|
spawnBrowser()?.then(async e =>
|
|
{
|
|
console.log("Sending exit Signal to server");
|
|
await server.stdin.write('shutdown\n');
|
|
await server.stdin.flush();
|
|
});
|
|
} |