Newton-Editor/newton/ipc.js

81 lines
1.9 KiB
JavaScript

const express = require('express');
const bodyParser = require('body-parser');
const http = require('http');
const socketIO = require('socket.io');
const fetch = require('electron-fetch').default
const IPC_SERVER_IP = "127.0.0.1";
let window = null;
let ipcServer = null;
let ipcServerPort = "4563";
let ipcServerURL = `http://${IPC_SERVER_IP}:${ipcServerPort}`;
const setWindow = (win) => {
window = win;
}
const loadIPCServer = (fpath) => {
const app = express();
ipcServer = http.createServer(app);
const io = socketIO(ipcServer);
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
}),
);
app.get("/is-up", (req, res) => {
res.status(200).send('yes');
});
app.post("/load-files", (req, res) => {
console.debug("Load File(s) : ", req.body);
window.webContents.send('load-files', req.body);
res.status(200).send('');
});
ipcServer.listen(ipcServerPort, () => {
console.debug("IPCServer (start) : Started on port ", ipcServerPort, " .");
});
}
const isIPCServerUp = async () => {
const response = await fetch(`${ipcServerURL}/is-up`).catch((err) => {
console.debug("IPCServer (status) : Not up; okay to start.");
return {
text: () => {
return "no";
}
}
});
const body = await response.text();
return (body == "yes") ? true : false;
}
const sendFilesToIPC = async (files) => {
let request = {
method: "POST",
body: JSON.stringify(files),
headers: { 'Content-Type': 'application/json' }
};
await fetch(`${ipcServerURL}/load-files`, request);
}
module.exports = {
newtonIPC: {
setWindow: setWindow,
loadIPCServer: loadIPCServer,
isIPCServerUp: isIPCServerUp,
sendFilesToIPC: sendFilesToIPC,
}
};