forked from jchomaz/Vulture
Tracking de l'application VApp (IHM du jeu)
This commit is contained in:
69
VApp/src/services/light-manager-DMX.js
Normal file
69
VApp/src/services/light-manager-DMX.js
Normal 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!");
|
||||
}
|
||||
18
VApp/src/services/mqttService.js
Normal file
18
VApp/src/services/mqttService.js
Normal 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())
|
||||
})
|
||||
}
|
||||
43
VApp/src/services/pictureEngine.js
Normal file
43
VApp/src/services/pictureEngine.js
Normal 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}`);
|
||||
});
|
||||
Reference in New Issue
Block a user