Files
MagicMirror/js/node_helper.js
T

127 lines
3.1 KiB
JavaScript
Raw Normal View History

2020-05-02 10:39:09 +02:00
const express = require("express");
2023-04-04 20:44:32 +02:00
const Log = require("logger");
const Class = require("./class");
2019-12-31 19:31:13 +00:00
2021-01-05 18:44:36 +01:00
const NodeHelper = Class.extend({
2024-01-01 15:38:08 +01:00
init () {
2020-05-11 07:25:42 +02:00
Log.log("Initializing new module helper ...");
2019-12-31 19:31:13 +00:00
},
2024-01-01 15:38:08 +01:00
loaded () {
2021-01-05 18:44:36 +01:00
Log.log(`Module helper loaded: ${this.name}`);
2019-12-31 19:31:13 +00:00
},
2024-01-01 15:38:08 +01:00
start () {
2021-01-05 18:44:36 +01:00
Log.log(`Starting module helper: ${this.name}`);
2019-12-31 19:31:13 +00:00
},
2021-10-18 14:36:31 +02:00
/**
2022-01-26 23:47:51 +01:00
* Called when the MagicMirror² server receives a `SIGINT`
2019-12-31 19:31:13 +00:00
* Close any open connections, stop any sub-processes and
* gracefully exit the module.
*/
2024-01-01 15:38:08 +01:00
stop () {
2021-01-05 18:44:36 +01:00
Log.log(`Stopping module helper: ${this.name}`);
2019-12-31 19:31:13 +00:00
},
2021-10-18 14:36:31 +02:00
/**
2019-12-31 19:31:13 +00:00
* This method is called when a socket notification arrives.
2021-10-18 14:36:31 +02:00
* @param {string} notification The identifier of the notification.
* @param {*} payload The payload of the notification.
2019-12-31 19:31:13 +00:00
*/
2024-01-01 15:38:08 +01:00
socketNotificationReceived (notification, payload) {
2021-01-05 18:44:36 +01:00
Log.log(`${this.name} received a socket notification: ${notification} - Payload: ${payload}`);
2019-12-31 19:31:13 +00:00
},
2021-10-18 14:36:31 +02:00
/**
2019-12-31 19:31:13 +00:00
* Set the module name.
2021-10-18 14:36:31 +02:00
* @param {string} name Module name.
2019-12-31 19:31:13 +00:00
*/
2024-01-01 15:38:08 +01:00
setName (name) {
2019-12-31 19:31:13 +00:00
this.name = name;
},
2021-10-18 14:36:31 +02:00
/**
2019-12-31 19:31:13 +00:00
* Set the module path.
2021-10-18 14:36:31 +02:00
* @param {string} path Module path.
2019-12-31 19:31:13 +00:00
*/
2024-01-01 15:38:08 +01:00
setPath (path) {
2019-12-31 19:31:13 +00:00
this.path = path;
},
2024-08-12 22:52:43 +02:00
/*
* sendSocketNotification(notification, payload)
2019-12-31 19:31:13 +00:00
* Send a socket notification to the node helper.
*
* argument notification string - The identifier of the notification.
* argument payload mixed - The payload of the notification.
*/
2024-01-01 15:38:08 +01:00
sendSocketNotification (notification, payload) {
2019-12-31 19:31:13 +00:00
this.io.of(this.name).emit(notification, payload);
},
2024-08-12 22:52:43 +02:00
/*
* setExpressApp(app)
2019-12-31 19:31:13 +00:00
* Sets the express app object for this module.
* This allows you to host files from the created webserver.
*
* argument app Express app - The Express app object.
*/
2024-01-01 15:38:08 +01:00
setExpressApp (app) {
2019-12-31 19:31:13 +00:00
this.expressApp = app;
2021-01-05 18:44:36 +01:00
app.use(`/${this.name}`, express.static(`${this.path}/public`));
2019-12-31 19:31:13 +00:00
},
2024-08-12 22:52:43 +02:00
/*
* setSocketIO(io)
2019-12-31 19:31:13 +00:00
* Sets the socket io object for this module.
* Binds message receiver.
*
* argument io Socket.io - The Socket io object.
*/
2024-01-01 15:38:08 +01:00
setSocketIO (io) {
2021-01-05 18:44:36 +01:00
this.io = io;
2019-12-31 19:31:13 +00:00
2021-01-05 18:44:36 +01:00
Log.log(`Connecting socket for: ${this.name}`);
io.of(this.name).on("connection", (socket) => {
2019-12-31 19:31:13 +00:00
// register catch all.
socket.onAny((notification, payload) => {
this.socketNotificationReceived(notification, payload);
2019-12-31 19:31:13 +00:00
});
});
}
});
2021-04-24 09:14:08 +02:00
NodeHelper.checkFetchStatus = function (response) {
// response.status >= 200 && response.status < 300
if (response.ok) {
return response;
} else {
throw Error(response.statusText);
}
};
2021-05-15 14:49:04 +02:00
/**
* Look at the specified error and return an appropriate error type, that
* can be translated to a detailed error message
* @param {Error} error the error from fetching something
* @returns {string} the string of the detailed error message in the translations
*/
NodeHelper.checkFetchError = function (error) {
let error_type = "MODULE_ERROR_UNSPECIFIED";
if (error.code === "EAI_AGAIN") {
error_type = "MODULE_ERROR_NO_CONNECTION";
2021-05-02 14:43:12 +02:00
} else if (error.message === "Unauthorized") {
error_type = "MODULE_ERROR_UNAUTHORIZED";
}
return error_type;
};
2020-05-11 22:22:32 +02:00
NodeHelper.create = function (moduleDefinition) {
2019-12-31 19:31:13 +00:00
return NodeHelper.extend(moduleDefinition);
};
2021-01-05 18:44:36 +01:00
module.exports = NodeHelper;