Guide : Ajouter un flux WebSocket
Ce guide explique comment créer un nouveau flux de données temps réel (ex: "Rythme Cardiaque du Cheval en Direct").
1. Créer un Contrôleur WS
Créez un nouveau fichier dans app/Controllers/Ws/HeartRateController.ts.
Il doit gérer le cycle de vie du flux.
import { Socket } from "socket.io";
export class HeartRateController {
private intervals: Map<string, NodeJS.Timeout> = new Map();
public startStream(socket: Socket, data: { horseId: number }) {
// 1. Valider l'entrée
if (!data.horseId) return;
// 2. Nettoyer le flux existant pour ce socket si nécessaire
this.cleanup(socket);
// 3. Démarrer la boucle de récupération de données
const interval = setInterval(async () => {
// Récupérer les données
const bpm = Math.floor(Math.random() * (60 - 40) + 40); // Fausses données
// Émettre vers le Client
socket.emit(`heartRate:${data.horseId}`, { bpm, timestamp: Date.now() });
}, 1000);
// 4. Stocker l'intervalle pour le nettoyer plus tard
this.intervals.set(socket.id, interval);
}
public cleanup(socket: Socket) {
if (this.intervals.has(socket.id)) {
clearInterval(this.intervals.get(socket.id));
this.intervals.delete(socket.id);
}
}
}
2. Enregistrer la Route
Ouvrez start/ws_routes.ts et branchez les événements.
import { HeartRateController } from "#controllers/ws/heart_rate_controller";
export default function defineWsRoutes(socket: Socket) {
const hrController = new HeartRateController();
// Démarrer le flux
socket.on("startHeartRate", (data) => hrController.startStream(socket, data));
// Arrêter/Déconnecter
socket.on("stopHeartRate", () => hrController.cleanup(socket));
socket.on("disconnect", () => hrController.cleanup(socket));
}
3. Utilisation Client
const socket = io("https://api.firstbreath.fr");
socket.emit("startHeartRate", { horseId: 123 });
socket.on("heartRate:123", (data) => {
console.log("BPM Actuel :", data.bpm);
});