diff options
Diffstat (limited to 'server/socket-handlers/general-socket-handler.js')
-rw-r--r-- | server/socket-handlers/general-socket-handler.js | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/server/socket-handlers/general-socket-handler.js b/server/socket-handlers/general-socket-handler.js new file mode 100644 index 0000000..50dcd94 --- /dev/null +++ b/server/socket-handlers/general-socket-handler.js @@ -0,0 +1,127 @@ +const { log } = require("../../src/util"); +const { Settings } = require("../settings"); +const { sendInfo } = require("../client"); +const { checkLogin } = require("../util-server"); +const GameResolver = require("gamedig/lib/GameResolver"); +const { testChrome } = require("../monitor-types/real-browser-monitor-type"); +const fs = require("fs"); +const path = require("path"); + +let gameResolver = new GameResolver(); +let gameList = null; + +/** + * Get a game list via GameDig + * @returns {object[]} list of games supported by GameDig + */ +function getGameList() { + if (gameList == null) { + gameList = gameResolver._readGames().games.sort((a, b) => { + if ( a.pretty < b.pretty ) { + return -1; + } + if ( a.pretty > b.pretty ) { + return 1; + } + return 0; + }); + } + return gameList; +} + +/** + * Handler for general events + * @param {Socket} socket Socket.io instance + * @param {UptimeKumaServer} server Uptime Kuma server + * @returns {void} + */ +module.exports.generalSocketHandler = (socket, server) => { + socket.on("initServerTimezone", async (timezone) => { + try { + checkLogin(socket); + log.debug("generalSocketHandler", "Timezone: " + timezone); + await Settings.set("initServerTimezone", true); + await server.setTimezone(timezone); + await sendInfo(socket); + } catch (e) { + log.warn("initServerTimezone", e.message); + } + }); + + socket.on("getGameList", async (callback) => { + try { + checkLogin(socket); + callback({ + ok: true, + gameList: getGameList(), + }); + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + + socket.on("testChrome", (executable, callback) => { + try { + checkLogin(socket); + // Just noticed that await call could block the whole socket.io server!!! Use pure promise instead. + testChrome(executable).then((version) => { + callback({ + ok: true, + msg: { + key: "foundChromiumVersion", + values: [ version ], + }, + msgi18n: true, + }); + }).catch((e) => { + callback({ + ok: false, + msg: e.message, + }); + }); + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + + socket.on("getPushExample", (language, callback) => { + + try { + let dir = path.join("./extra/push-examples", language); + let files = fs.readdirSync(dir); + + for (let file of files) { + if (file.startsWith("index.")) { + callback({ + ok: true, + code: fs.readFileSync(path.join(dir, file), "utf8"), + }); + return; + } + } + } catch (e) { + + } + + callback({ + ok: false, + msg: "Not found", + }); + }); + + // Disconnect all other socket clients of the user + socket.on("disconnectOtherSocketClients", async () => { + try { + checkLogin(socket); + server.disconnectAllSocketClients(socket.userID, socket.id); + } catch (e) { + log.warn("disconnectAllSocketClients", e.message); + } + }); +}; |