Modification du score-manager

This commit is contained in:
2026-01-23 18:40:44 +01:00
parent 0186a0a83e
commit 905da933dc

View File

@@ -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,8 +174,18 @@ 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);
@@ -177,46 +193,55 @@ client.on('message', (topic, message) => {
} }
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":
change = parseInt(Action, 10); // Convertit 'action' en entier
if (!isNaN(change)) {
updateTeamTotalScore("Red", change)
} else { } else {
console.error(`Action invalide : ${action}`); // Mise à jour relative (existant)
} let change = parseInt(Action, 10);
break;
case "Blue":
change = parseInt(Action, 10); // Convertit 'action' en entier
if (!isNaN(change)) { if (!isNaN(change)) {
updateTeamTotalScore("Blue", change) updateTeamTotalScore(Team, change);
} else { } else {
console.error(`Action invalide : ${action}`); 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");