mirror of
https://github.com/UiO-Gaming/infoscreen3.git
synced 2026-11-06 22:34:30 +01:00
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
89 lines
2.7 KiB
JavaScript
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};
|
|
};
|