UNPKG

vrem

Version:

An open-source automatic time-tracker

86 lines (85 loc) 3.33 kB
"use strict"; 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'); });