1
0
forked from jchomaz/Vulture

Tracking de l'application VApp (IHM du jeu)

This commit is contained in:
2025-05-11 18:04:12 +02:00
commit 89e9db9b62
17763 changed files with 3718499 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
// websocket.js
let websocket;
export function connectWebSocket(url) {
websocket = new WebSocket(url);
websocket.onopen = () => {
console.log("WebSocket connection established");
};
websocket.onclose = () => {
console.log("QLC+ connection is closed. Reconnect will be attempted in 1 second.");
setTimeout(() => {
connectWebSocket(url);
}, 1000);
};
websocket.onerror = (err) => {
console.error("QLC+ connection encountered error. Closing socket", err);
websocket.close();
};
websocket.onmessage = (ev) => {
const message = ev.data.toString();
const msgParams = message.split("|");
if (msgParams[1] === "BUTTON") {
//wsSetButtonState(msgParams[0], msgParams[2]);
} else if (msgParams[1] === "SLIDER") {
wsSetSliderValue(msgParams[0], msgParams[2], msgParams[3]);
} else if (msgParams[1] === "AUDIOTRIGGERS") {
wsSetAudioTriggersEnabled(msgParams[0], msgParams[2]);
} else if (msgParams[1] === "CUE") {
wsSetCueIndex(msgParams[0], msgParams[2]);
} else if (msgParams[1] === "CLOCK") {
wsUpdateClockTime(msgParams[0], msgParams[2]);
} else if (msgParams[1] === "FRAME") {
setFramePage(msgParams[0], msgParams[2]);
} else if (msgParams[1] === "getWidgetsList") {
console.log(msgParams)
}
};
}
export function sendButtonPress(id, state) {
if (state == 1){
websocket.send(id + "|255");
// Quand un bouton est pressé, envoyez un message au serveur
console.log(`Button ${id} pressed and sent to server`);
}
if (state == 0){
websocket.send(id + "|0");
// Quand un bouton est pressé, envoyez un message au serveur
console.log(`Button ${id} released and sent to server`);
}
}
export function sendCMD(cmd) {
websocket.send("QLC+CMD|" + cmd);
}
export function requestAPI(cmd)
{
if (isConnected === true)
websocket.send("QLC+API|" + cmd);
else
alert("You must connect to QLC+ WebSocket first!");
}

View File

@@ -0,0 +1,18 @@
import mqtt from 'mqtt'
import config from '@/config.js'
const mqttBrokerUrl = config.mqttBrokerUrl
// Créer une instance de client MQTT
const client = mqtt.connect(mqttBrokerUrl)
// Fonction pour publier un message sur un topic MQTT
export function publishMessage(topic, message) {
client.publish(topic, message)
}
// Fonction pour s'abonner à un topic MQTT et écouter les messages entrants
export function subscribeToTopic(topic, callback) {
client.subscribe(topic)
client.on('message', (receivedTopic, message) => { callback(receivedTopic.toString(), message.toString())
})
}

View File

@@ -0,0 +1,43 @@
import express from 'express';
import { promises as fs } from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const app = express();
const port = 3000;
// Obtenir le chemin du répertoire parent
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Middleware pour gérer les requêtes depuis le frontend
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
next();
});
// Le dossier assets est situé un niveau au-dessus du dossier services
const assetsDir = path.join(__dirname, '..', 'quizz/geography-history');
console.log(assetsDir)
// Middleware pour servir les fichiers statiques
app.use('/images', express.static(assetsDir));
// API pour lister les fichiers d'image
app.get('/images-list', async (req, res) => {
try {
const files = await fs.readdir(assetsDir);
// Filtrer pour ne renvoyer que les fichiers d'image (par ex : .jpg, .png)
const images = files.filter(file => /\.(jpg|jpeg|png|gif)$/.test(file));
res.json(images);
} catch (err) {
res.status(500).send('Erreur lors de la lecture du dossier');
}
});
app.listen(port, () => {
console.log(`Serveur démarré sur http://localhost:${port}`);
});