Files
infoscreen3/modules/websocket.js
T
Reaby dabd104b3a Notice: breaking changes for configs so reconfigure needed, run npm install again as well!
Added proper authentication
Started to add permissions for ui
Added unload webpage from the layer when it hides
Added autosense for language based on browser preferred lang
2019-05-14 19:39:07 +03:00

89 lines
2.7 KiB
JavaScript

let availableDisplays = require("../config.js").displays;
let display = require("./display.js");
let admin = require("./admin.js");
let cli = require('./cli.js');
let _bundleManager = require('./bundleManager.js');
let chalk = require('chalk');
let fs = require('fs');
/**
*
* @type {display[]}
*/
let screenView = [];
/**
* @exports websocket
*/
module.exports = function (server, app, io, dispatcher) {
console.log(chalk.green(">> ") + "InfoScreen3" + chalk.green("<<"));
cli.log("Checking for write permissions...");
try {
fs.accessSync("./data", fs.W_OK);
cli.success("data directory (./data) is writable");
} catch (err) {
cli.error("data directory (./data) is not writable", err);
process.exit(1);
}
try {
fs.accessSync("./tmp", fs.W_OK);
cli.success("temp directory (./tmp) is writable ");
let tempFiles = fs.readdirSync("./tmp/", {
dotfiles: false
});
cli.info("removing temp-files...");
for (let file of tempFiles) {
if (file !== ".gitkeep") {
fs.unlinkSync("./tmp/" + file);
}
}
cli.info("done.");
} catch (err) {
cli.error("temp directory (./tmp) is not writable", err);
process.exit(1);
}
cli.info("Starting bundle manager...");
let bundleManager = new _bundleManager();
cli.info("Starting websocket backends...");
let screenId = 0;
for (let metadata of availableDisplays) {
screenView.push(new display(io, dispatcher, metadata, screenId, bundleManager));
screenId += 1;
}
let adminView = new admin(io, dispatcher, screenView, bundleManager);
io.of("/lobby").on("connection", function (socket) {
cli.info("WS/" + socket.conn.remoteAddress + " connect");
socket.on('error', function (error) {
cli.error(error, "WS/ error");
});
socket.on('disconnect', function (reason) {
cli.info("WS/ " + reason + " " + socket.conn.remoteAddress);
});
socket.on('displays', function () {
let previewImages = [];
for (let display of screenView) {
if (display.serverOptions.currentMeta.type === "slide") {
previewImages.push("/render/" + display.serverOptions.currentBundle + "/" + display.serverOptions.currentFile + ".png");
} else {
previewImages.push("/img/nopreview.png");
}
}
socket.emit("callback.displays", {displays: availableDisplays, previewImages: previewImages});
});
});
return {screenView: screenView, adminView: adminView, bundleManager: bundleManager};
};