vrem
Version:
An open-source automatic time-tracker
86 lines (85 loc) • 3.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ipc_1 = require("../ipc");
const http_1 = __importDefault(require("http"));
const ws_1 = __importDefault(require("ws"));
const utils_1 = require("../utils");
const api_1 = __importDefault(require("./api"));
const constants_1 = __importDefault(require("../constants"));
const express = require('express');
const path = require('path');
(function () {
new ipc_1.IpcServer().listen(constants_1.default.serverSocketPath, () => {
console.info("Vrem's server process is listening on socket ", constants_1.default.serverSocketPath);
});
})();
const app = express();
const uiPath = path.resolve(__dirname, '../../dist_ui');
app.use(express.static(uiPath));
// app.post('/extension', express.json(), async (req, res) => {
// //console.log("Extension sent", req.body);
// const response = await ipcRequest(constants.autoTrackerSocketPath, 'subprogram', req.body);
// res.send(response);
// });
app.get('*', (req, res) => {
res.sendFile(uiPath + '/index.html');
});
app.use((req, res) => {
res.sendStatus(404);
});
const server = http_1.default.createServer(app);
const wss = new ws_1.default.Server({ server, clientTracking: true, path: '/vrem-api' });
let currentProgram = null;
api_1.default.getActiveProgram = () => currentProgram;
function notifyWs(ws, type, value) {
ws.send(JSON.stringify({ type, value }));
}
wss.on('connection', ws => {
notifyWs(ws, 'current_program', currentProgram);
ws.on('message', async (json) => {
const data = JSON.parse(json);
try {
if (!api_1.default[data.method]) {
throw new Error("Ошибка: запрошен несуществующий метод API");
}
const result = await api_1.default[data.method](...data.params);
ws.send(JSON.stringify({
id: data.id,
result: result,
}));
}
catch (e) {
process.env.NODE_ENV !== 'production' && console.error(e);
ws.send(JSON.stringify({
id: data.id,
error: { message: "RPC error. " + e.message, requestBody: data },
}));
}
});
});
const trackerConnection = new ipc_1.PersistentConnection(constants_1.default.autoTrackerSocketPath);
trackerConnection.onConnect(async () => {
try {
await trackerConnection.send({ command: 'subscribe' });
}
catch (e) {
console.error('Cannot subscribe', e);
}
});
trackerConnection.onData(data => {
currentProgram = data;
if (currentProgram)
currentProgram.description = currentProgram.description || (0, utils_1.getDescriptionByPath)(data.path);
//console.log('Data from tracker', data);
wss.clients.forEach(ws => notifyWs(ws, 'current_program', currentProgram));
});
trackerConnection.onClose(() => {
currentProgram = null;
wss.clients.forEach(ws => notifyWs(ws, 'current_program', currentProgram));
});
server.listen(3210, () => {
console.info('Server is listening on port 3210');
});