forked from jchomaz/Vulture
Modification du score-manager
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
const args = process.argv;
|
const args = process.argv;
|
||||||
|
|
||||||
// Vérification si un paramètre est passé, si c'est le cas c'est qu'on fournis un fichier de score pour reprendre le jeu la ou il était
|
// Vérification si un paramètre est passé, si c'est le cas c'est qu'on fournis un fichier de score pour reprendre le jeu la ou il était
|
||||||
if (args[2] !== undefined){
|
if (args[2] !== undefined) {
|
||||||
global.ScoreFile = args[2]
|
global.ScoreFile = args[2]
|
||||||
}else{
|
} else {
|
||||||
global.ScoreFile = "XXX.json"
|
global.ScoreFile = "XXX.json"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,36 +50,36 @@ fs.access(filePath, fs.constants.F_OK, (err) => {
|
|||||||
const initialContent = {
|
const initialContent = {
|
||||||
"TEAM": {
|
"TEAM": {
|
||||||
"Red": {
|
"Red": {
|
||||||
"Name": "XXX",
|
"Name": "XXX",
|
||||||
"TotalScore": 0,
|
"TotalScore": 0,
|
||||||
"RoundScore": 0,
|
"RoundScore": 0,
|
||||||
"Penality": 0,
|
"Penality": 0,
|
||||||
"MasterPoint": 0
|
"MasterPoint": 0
|
||||||
},
|
},
|
||||||
"Blue": {
|
"Blue": {
|
||||||
"Name": "XXX",
|
"Name": "XXX",
|
||||||
"TotalScore": 0,
|
"TotalScore": 0,
|
||||||
"RoundScore": 0,
|
"RoundScore": 0,
|
||||||
"Penality": 0,
|
"Penality": 0,
|
||||||
"MasterPoint": 0
|
"MasterPoint": 0
|
||||||
},
|
},
|
||||||
"Yellow": {
|
"Yellow": {
|
||||||
"Name": "XXX",
|
"Name": "XXX",
|
||||||
"TotalScore": 0,
|
"TotalScore": 0,
|
||||||
"RoundScore": 0,
|
"RoundScore": 0,
|
||||||
"Penality": 0,
|
"Penality": 0,
|
||||||
"MasterPoint": 0
|
"MasterPoint": 0
|
||||||
},
|
},
|
||||||
"Green": {
|
"Green": {
|
||||||
"Name": "XXX",
|
"Name": "XXX",
|
||||||
"TotalScore": 0,
|
"TotalScore": 0,
|
||||||
"RoundScore": 0,
|
"RoundScore": 0,
|
||||||
"Penality": 0,
|
"Penality": 0,
|
||||||
"MasterPoint": 0
|
"MasterPoint": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
fs.writeFile(newFilePath, JSON.stringify(initialContent, null, 2), (err) => {
|
fs.writeFile(newFilePath, JSON.stringify(initialContent, null, 2), (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error("Erreur de création du fichier :", err);
|
console.error("Erreur de création du fichier :", err);
|
||||||
@@ -108,10 +108,10 @@ function updateTeamTotalScore(teamColor, points) {
|
|||||||
if (!jsonData.TEAM.hasOwnProperty(teamColor)) {
|
if (!jsonData.TEAM.hasOwnProperty(teamColor)) {
|
||||||
console.error(`L'équipe ${teamColor} n'existe pas.`);
|
console.error(`L'équipe ${teamColor} n'existe pas.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const change = parseInt(points, 10);
|
const change = parseInt(points, 10);
|
||||||
|
|
||||||
// Mettre à jour le score
|
// Mettre à jour le score
|
||||||
jsonData.TEAM[teamColor].TotalScore += points;
|
jsonData.TEAM[teamColor].TotalScore += points;
|
||||||
console.log(`Le score total pour l'équipe ${teamColor} est de ${jsonData.TEAM[teamColor].TotalScore} points !`)
|
console.log(`Le score total pour l'équipe ${teamColor} est de ${jsonData.TEAM[teamColor].TotalScore} points !`)
|
||||||
@@ -132,11 +132,15 @@ function updateTeamTotalScore(teamColor, points) {
|
|||||||
|
|
||||||
|
|
||||||
// Lecture du fichier de configuration
|
// Lecture du fichier de configuration
|
||||||
const config = JSON.parse(fs.readFileSync(path.join('services','config','config_game.json'), 'utf8'));
|
const configPath = path.join(__dirname, '../config/config_game.json');
|
||||||
|
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
||||||
|
|
||||||
// Extraction des informations de config
|
// Extraction des informations de config
|
||||||
const { services: { mqttHost, score: { MQTTconfig: { mqttScoreTopic, mqttScoreChangeTopic } } } } = config;
|
const { services: { mqttHost, score: { MQTTconfig: { mqttScoreTopic, mqttScoreChangeTopic } } } } = config;
|
||||||
console.log(mqttScoreChangeTopic)
|
console.log("DEBUG: Config loaded from:", configPath);
|
||||||
|
console.log("DEBUG: MQTT Host:", mqttHost);
|
||||||
|
console.log("DEBUG: Topics:", mqttScoreTopic, mqttScoreChangeTopic);
|
||||||
|
|
||||||
// Connexion au broker MQTT
|
// Connexion au broker MQTT
|
||||||
const client = mqtt.connect(mqttHost);
|
const client = mqtt.connect(mqttHost);
|
||||||
|
|
||||||
@@ -156,6 +160,8 @@ client.on('message', (topic, message) => {
|
|||||||
let process;
|
let process;
|
||||||
let Team;
|
let Team;
|
||||||
let Action;
|
let Action;
|
||||||
|
let TotalScore = null;
|
||||||
|
let RoundScore = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Analyse du message reçu
|
// Analyse du message reçu
|
||||||
@@ -168,63 +174,82 @@ client.on('message', (topic, message) => {
|
|||||||
if (payload && typeof payload === 'object') {
|
if (payload && typeof payload === 'object') {
|
||||||
// Extraire la clé (la couleur) et la valeur associée
|
// Extraire la clé (la couleur) et la valeur associée
|
||||||
Team = Object.keys(payload)[0]; // La première (et unique) clé
|
Team = Object.keys(payload)[0]; // La première (et unique) clé
|
||||||
Action = payload[Team]; // La valeur associée
|
let value = payload[Team]; // La valeur associée
|
||||||
//console.log(`Team: ${Team}, Action: ${Action}`);
|
|
||||||
|
if (typeof value === 'object') {
|
||||||
|
// Mode SET (valeur absolue)
|
||||||
|
if (value.hasOwnProperty('Total')) TotalScore = parseInt(value.Total, 10);
|
||||||
|
if (value.hasOwnProperty('Round')) RoundScore = parseInt(value.Round, 10);
|
||||||
|
Action = "SET";
|
||||||
|
} else {
|
||||||
|
// Mode ADD (relatif)
|
||||||
|
Action = value;
|
||||||
|
}
|
||||||
|
|
||||||
process = true;
|
process = true;
|
||||||
} else {
|
} else {
|
||||||
console.error(typeof payload);
|
console.error(typeof payload);
|
||||||
process = false;
|
process = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process === true){
|
if (process === true) {
|
||||||
let currentScore = 0;
|
if (Action === "SET") {
|
||||||
let change = 0 ;
|
// Mise à jour absolue
|
||||||
switch (Team){
|
updateTeamScoreAbsolute(Team, TotalScore, RoundScore);
|
||||||
case "Red":
|
} else {
|
||||||
change = parseInt(Action, 10); // Convertit 'action' en entier
|
// Mise à jour relative (existant)
|
||||||
if (!isNaN(change)) {
|
let change = parseInt(Action, 10);
|
||||||
updateTeamTotalScore("Red", change)
|
if (!isNaN(change)) {
|
||||||
} else {
|
updateTeamTotalScore(Team, change);
|
||||||
console.error(`Action invalide : ${action}`);
|
} else {
|
||||||
}
|
console.error(`Action invalide : ${Action}`);
|
||||||
break;
|
}
|
||||||
case "Blue":
|
|
||||||
change = parseInt(Action, 10); // Convertit 'action' en entier
|
|
||||||
if (!isNaN(change)) {
|
|
||||||
updateTeamTotalScore("Blue", change)
|
|
||||||
} else {
|
|
||||||
console.error(`Action invalide : ${action}`);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "Green":
|
|
||||||
change = parseInt(Action, 10); // Convertit 'action' en entier
|
|
||||||
if (!isNaN(change)) {
|
|
||||||
updateTeamTotalScore("Green", change)
|
|
||||||
} else {
|
|
||||||
console.error(`Action invalide : ${action}`);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "Yellow":
|
|
||||||
change = parseInt(Action, 10); // Convertit 'action' en entier
|
|
||||||
if (!isNaN(change)) {
|
|
||||||
updateTeamTotalScore("Yellow", change)
|
|
||||||
} else {
|
|
||||||
console.error(`Action invalide : ${action}`);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Fonction pour mettre à jour le score d'une équipe (Absolu)
|
||||||
|
function updateTeamScoreAbsolute(teamColor, totalScore, roundScore) {
|
||||||
|
fs.readFile(filePath, 'utf8', (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error("Erreur de lecture du fichier :", err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const jsonData = JSON.parse(data);
|
||||||
|
if (!jsonData.TEAM.hasOwnProperty(teamColor)) {
|
||||||
|
console.error(`L'équipe ${teamColor} n'existe pas.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalScore !== null && !isNaN(totalScore)) {
|
||||||
|
jsonData.TEAM[teamColor].TotalScore = totalScore;
|
||||||
|
}
|
||||||
|
if (roundScore !== null && !isNaN(roundScore)) {
|
||||||
|
jsonData.TEAM[teamColor].RoundScore = roundScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Mise à jour absolue pour ${teamColor} -> Total: ${jsonData.TEAM[teamColor].TotalScore}, Round: ${jsonData.TEAM[teamColor].RoundScore}`);
|
||||||
|
|
||||||
|
client.publish(mqttScoreTopic, JSON.stringify(jsonData));
|
||||||
|
fs.writeFile(filePath, JSON.stringify(jsonData, null, 2), (err) => {
|
||||||
|
if (err) console.error("Erreur d'écriture :", err);
|
||||||
|
});
|
||||||
|
} catch (parseErr) {
|
||||||
|
console.error("Erreur JSON :", parseErr);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
while (true) {
|
while (true) {
|
||||||
console.log("Boucle en arrière-plan");
|
console.log("Boucle en arrière-plan");
|
||||||
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 2000)); // Pause de 2 secondes
|
await new Promise((resolve) => setTimeout(resolve, 2000)); // Pause de 2 secondes
|
||||||
//client.publish(mqttScoreTopic, JSON.stringify(global.jsonData));
|
//client.publish(mqttScoreTopic, JSON.stringify(global.jsonData));
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
client.on('error', (error) => {
|
client.on('error', (error) => {
|
||||||
console.error('Erreur de connexion au broker MQTT:', error.message);
|
console.error('Erreur de connexion au broker MQTT:', error.message);
|
||||||
|
|||||||
Reference in New Issue
Block a user