11491 sujets

JavaScript, DOM et API Web HTML5

bonsoir,

j'ai un serveur web sur un microcontrôleur qui établit un websocket avec le navigateur. Ça marche en wifi, tout est à peu près ok... pas de pb.

j'aimerai que côté client je puisse afficher un message d'erreur quand le serveur n'est plus accessible (extinction, éloignement, je ne sais quoi)
Normalement le serveur envoie un message toutes les secondes donc je pensais afficher une erreur sur l'interface web s'il n'y a pas eu de message WS depuis plus de 2 s. C'est le but de testPresence() du script ci-dessous

Mais ça ne donne rien : Le JS semble ne jamais passer par la fonction testPresence après l'établissement du WS.

J'ai essayer de simplifier au max pour cerner le pb mais je ne trouve pas (OK je suis une brêle en JS et je ne comprends pas forcement tout ce que j'ai fait - récupéré en parti dans des exemples sur le web)

Deux questions :
1. pourquoi est ce que testPresence n'est jamais executé hormis tout au début après le chargement de page ?
2. il existe peut-être une solution plus simple, prévue pour que je ne connais pas

merci de votre aide


var gateway = `ws://${window.location.hostname}/ws`;
var websocket;
var debut = Date.now();
var dernier = Date.now();

// démarre le WS au chargement de la page
window.addEventListener('load', onload);
function onload(event) {
    initWebSocket();
}
function initWebSocket() {
    console.log('Connexion WebSocket');
    websocket = new WebSocket(gateway);
    websocket.onopen = onOpen;
    websocket.onclose = onClose;
    websocket.onmessage = onMessage;
}

// verification de la connexion à l'ESP
const itvl = setInterval(testPresence(), 2000);

function testPresence() {
    console.log(dernier);
   // TEST ICI MAIS ÇA NE PASSE JAMAIS ICI !
}

function onMessage(event) {
    dernier = Date.now();
    console.log(event.data);

// le traitement du message pour afficher des trucs ... 
// je coupe c'est un peu long pas forcement pertinent ici
}

// ouverture fermeture
function onOpen(event) {
    console.log('Connexion établie');
}
function onClose(event) {
    console.log('Connexion fermée');
    setTimeout(initWebSocket, 2000);
}
Merci beaucoup, c'était ça !

Dans le lien fourni : « Les développeurs novices font parfois l’erreur d’ajouter des parenthèses () après la fonction » c'est tout moi ça Smiley cligne
Modifié par ChristianW (29 Apr 2024 - 12:47)