Version 0.7.3 - Ajout de la modification des nodes

This commit is contained in:
Raphix
2023-09-06 20:27:36 +02:00
parent 8e167da16f
commit b0e61fc7f8
8 changed files with 609 additions and 23 deletions

View File

@ -253,12 +253,21 @@ function startErelaManager(dlog, config) {
// Emitted whenever a node connects
client.manager.on("nodeConnect", node => {
elog.log(`Connecté au serveur Lavalink : "${node.options.identifier}"` )
nodeFinder.setNodeState(node.options.identifier, true)
})
// Emitted whenever a node encountered an error
client.manager.on("nodeError", (node, error) => {
elog.warn(`Node "${node.options.identifier}" encountered an error: ${error.message}.`)
})
client.manager.on("nodeDisconnect", (node) => {
nodeFinder.setNodeState(node.options.identifier, false)
})

View File

@ -1,9 +1,12 @@
const { __glob } = require("./global-variables")
const { LogType } = require("../modules/sub-log")
const fs = require("fs")
const discord = require("./discord-bot")
const nlog = new LogType("Node-Finder")
const nodesState = new Map()
module.exports.getNodes = function () {
nlog.step.init("find_nodes", "Récupération des nodes de la base de donnée")
@ -13,9 +16,9 @@ module.exports.getNodes = function () {
var nodes_data = JSON.parse(fs.readFileSync(__glob.NODES))
const nodes_array = new Array()
for(node of nodes_data) {
for(var node of nodes_data) {
nodes_array.push(node)
nodesState.set(node.host, false)
}
nlog.log("Récupération de " + nodes_array.length + " nodes dans la base de donnée !")
@ -45,6 +48,48 @@ module.exports.getNodes = function () {
}
module.exports.getNodesData = function () {
nlog.step.init("findu_nodes", "Récupération des nodes pour envoi d'informations!")
if(fs.existsSync(__glob.NODES)) {
try {
var nodes_data = JSON.parse(fs.readFileSync(__glob.NODES))
const nodes_array = new Array()
for(var node of nodes_data) {
node.state = nodesState.get(node.host)
nodes_array.push(node)
}
nlog.log("Récupération de " + nodes_array.length + " nodes pour envoi d'informations!")
nlog.step.end("findu_nodes")
return nodes_array
} catch(error) {
nlog.step.error("findu_nodes", error)
}
} else {
nlog.warn("Fichier de configuration introuvable !")
try {
var nodes = {}
fs.writeFileSync(__glob.NODES, JSON.stringify(nodes, null, 2))
nlog.log("Création d'un fichier de base de donnée de nodes ! Redémarrage de l'application nécéssaire !")
nlog.step.error("find_nodes", "Redémarrage requis pour lire la nouvelle base de donnée des nodes !")
process.exit(0)
} catch(error) {
nlog.step.error("find_nodes", "Tentative de création du fichier de base de donnée nodes échoué !" + error)
}
}
}
module.exports.addNodes = function (data) {
nlog.step.init("add_nodes", "Ajout d'un nouveau noeud dans la base de donnée de nodes : " + data.host)
@ -59,6 +104,20 @@ module.exports.addNodes = function (data) {
nlog.step.end("add_nodes")
const client = discord.getClient()
if(client.manager) {
const nodesPresent = client.manager.nodes
if(!nodesPresent.get(data.host)) {
client.manager.createNode(data)
}
client.manager.nodes.get(data.host).connect()
}
} catch(error) {
nlog.step.error("add_nodes", error)
@ -83,3 +142,107 @@ module.exports.addNodes = function (data) {
}
}
module.exports.deleteNode = function (data) {
nlog.step.init("deleteNodes", "Supression d'un noeud dans la base de donnée de nodes : " + data.host)
if(fs.existsSync(__glob.NODES)) {
try {
var nodes_data = JSON.parse(fs.readFileSync(__glob.NODES))
var nodeIndex = -1
for(var node of nodes_data) {
if(node.host == data.host) {
nodeIndex = nodes_data.indexOf(node)
}
}
nodes_data.splice(nodeIndex, 1)
const client = discord.getClient()
if(client.manager) {
const nodesPresent = client.manager.nodes
if(nodesPresent.get(data.host)) {
client.manager.destroyNode(data.host)
}
}
fs.writeFileSync(__glob.NODES, JSON.stringify(nodes_data, null, 2))
nlog.step.end("deleteNodes")
} catch(error) {
nlog.step.error("deleteNodes", error)
}
} else {
nlog.warn("Fichier de configuration introuvable !")
try {
var nodes = []
fs.writeFileSync(__glob.NODES, JSON.stringify(nodes, null, 2))
nlog.log("Création d'un fichier de base de donnée de nodes ! Redémarrage de l'application nécéssaire !")
nlog.step.error("deleteNodes", "Redémarrage requis pour lire la nouvelle base de donnée des nodes !")
process.exit(0)
} catch(error) {
nlog.step.error("deleteNodes", "Tentative de création du fichier de nodes échoué !" + error)
}
}
}
module.exports.reloadNode = function (data) {
const client = discord.getClient()
if(client.manager) {
const nodesPresent = client.manager.nodes
if(nodesPresent.get(data.host)) {
client.manager.destroyNode(data.host)
}
nlog.log("Redémarrage de la node : " + data.host)
client.manager.createNode(data)
client.manager.nodes.get(data.host).connect()
}
}
/**
* Ajout de l'état des nodes
* @param {string} node
* @param {boolean} state
*/
module.exports.setNodeState = function(node, state) {
nodesState.set(node, state)
process.emit("UPDATE_NODES")
}
module.exports.getNodesStates = function() {
return nodesState
}

View File

@ -5,9 +5,10 @@ const log = require("./sub-log");
const auth = require("./sub-auth");
const cook = require("cookie")
const wlog = new LogType("Web")
const subplayer = require(__glob.SUBPLAYER);
const subplayer = require('./sub-player');
const { List } = require("./sub-list")
const subplaylist = require("./sub-playlist")
const nodesfinder = require("./nodes-finder")
var fs = require("fs")
var path = require("path")
@ -140,6 +141,19 @@ function IOConnection(io) {
const alog = log.getInstance("Authentification")
process.on("UPDATE_NODES", () => {
if(io) {
const data = nodesfinder.getNodesData()
io.sockets.emit("ALWAYS/NODES", data)
}
})
process.on("MUSIC_UPDATE_STATE", () => {
const data = subplayer.updateMusicState()
@ -317,6 +331,14 @@ function IOConnection(io) {
})
GetRequest(io, socket, "NODES", () => {
process.emit("UPDATE_NODES")
})
@ -336,8 +358,100 @@ function IOConnection(io) {
})
// SEND REQUEST
socket.on("SEND/NODES/ADD", (data) => {
var cookies = socket.handshake.headers.cookie
if(cookies) {
cookies = cook.parse(cookies)
var token = cookies.token
const user = auth.getUser(token)
if(user.admin == true) {
nodesfinder.addNodes(data)
socket.emit("ANSWER/SEND/NODES/ADD", "OK")
process.emit("UPDATE_NODES")
}
} else {
io.emit("ANSWER/SEND/USERS/ADD", {"error":"TOKEN_NOT_FINDED"})
}
})
socket.on("SEND/NODES/DELETE", (data) => {
var cookies = socket.handshake.headers.cookie
if(cookies) {
cookies = cook.parse(cookies)
var token = cookies.token
const user = auth.getUser(token)
if(user.admin == true) {
nodesfinder.deleteNode(data)
socket.emit("ANSWER/SEND/NODES/DELETE", "OK")
process.emit("UPDATE_NODES")
}
} else {
io.emit("ANSWER/SEND/USERS/ADMIN", {"error":"TOKEN_NOT_FINDED"})
}
})
socket.on("SEND/NODES/RELOAD", (data) => {
var cookies = socket.handshake.headers.cookie
if(cookies) {
cookies = cook.parse(cookies)
var token = cookies.token
const user = auth.getUser(token)
if(user.admin == true) {
nodesfinder.reloadNode(data)
socket.emit("ANSWER/SEND/NODES/RELOAD", "OK")
process.emit("UPDATE_NODES")
}
} else {
io.emit("ANSWER/SEND/NODES/RELOAD", {"error":"TOKEN_NOT_FINDED"})
}
})
socket.on("SEND/USERS/ADMIN", (data) => {