|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- var emu = require("./js/emulate");
- var ipc = require("./js/ipc");
- var shell = require("./js/shell");
- var udev = require("./udev");
- var pathlib = require("path");
- var fs = require("fs");
-
- var mountdir = "/tmp/emuboy.mnt"
-
- process.on("unhandledRejection", evt => {
- console.trace(evt);
- process.exit(1);
- });
-
- var rompath = mountdir+"/roms";
-
- var games = [];
-
- function updateGames() {
- if (driveMounted) {
- var rx = /\.(gba|gbc|nds)$/;
- fs.readdir(rompath, (err, list) => {
- if (err)
- throw err;
-
- games = list.filter(x => rx.test(x));
- ipc.sendGameList(games);
- });
- } else {
- games = [];
- ipc.sendGameList(games);
- }
- }
-
- var driveMounted = false;
- async function onblock(evt) {
- if (evt.DEVTYPE !== "partition")
- return;
- if (evt.PARTN !== "1")
- return;
- if (evt.ID_BUS !== "usb")
- return;
-
- if (!evt.ACTION || evt.ACTION === "add") {
- await shell.safe("mkdir", "-p", mountdir);
- if (await shell("mountpoint", "-q", mountdir) === 0)
- await shell.safe("sudo", "umount", mountdir);
- await shell.safe(
- "sudo", "mount", "-o", "uid="+process.env.USER,
- evt.DEVNAME, mountdir);
- await shell.safe("mkdir", "-p", rompath);
- driveMounted = true;
- updateGames();
- } else if (evt.ACTION === "remove") {
- driveMounted = false;
- console.log("Unmounted drive", evt.DEVNAME);
- updateGames();
- }
- }
- udev.init();
- udev.monitor("block", onblock);
- udev.list("block", x => x.forEach(onblock));
-
- ipc.init(8085, () => {
- console.log("Server started");
-
- ipc.on("run", async function(name) {
- try {
- ipc.sendGameStart();
- await emu.run(pathlib.join(rompath, name));
- } catch (err) {
- ipc.error(err.toString());
- console.trace(err);
- }
- ipc.sendGameStopped();
- });
-
- ipc.on("connection", () => {
- updateGames();
- });
- });
|