Aller au contenu principal

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);
});