WebSocketAppBase
network
network/WebSocketAppBase.h
network
Tool: WebSocketAppBase Socle commun à tout périphérique CREPP qui expose une page web servie en HTTP et mise à jour en temps réel via WebSocket. Regroupe UNIQUEMENT la mécanique de transport, strictement identique entre PicoWebTerminal et WebControlPanel avant ce refactor :
Méthodes publiques
| Méthode | Description | Paramètres | Retour |
|---|---|---|---|
|
WebSocketAppBase()
WebSocketAppBase(uint16_t httpPort, uint16_t wsPort);
|
Construit les serveurs HTTP/WebSocket (ne démarre rien tant que beginServers() n'est pas appelé par la classe fille). / | httpPort: Port du serveur HTTP. wsPort: Port du serveur WebSocket. / |
|
|
getConnectedClients()
getConnectedClients();
|
Nombre de navigateurs actuellement connectés au WebSocket. / | ||
|
getServerIP()
getServerIP() const;
|
Adresse IP courante (point d'accès ou réseau existant, selon le mode WiFi actif au moment de l'appel). / | ||
|
beginMDNS()
beginMDNS(const String& hostname);
|
Démarre un nom mDNS (ex: "robot-crepp.local") pour accéder à l'interface sans connaître l'adresse IP. A appeler après avoir connecté le WiFi (connectToWiFi()/startAP()), avant ou après begin()/beginServers(). aucune bibliothèque mDNS compatible n'est disponible pour le | hostname: Nom sans le suffixe ".local" (ex: "robot-crepp"). | truetrue si le service mDNS a démarré. Renvoie toujours false si aucune bibliothèque mDNS compatible n'est disponible pour le coeur Arduino utilisé (voir le commentaire en tête de fichier) — dans ce cas, utilisez l'adresse IP donnée par getServerIP(). / |
Méthodes privées
handleHttpClient(WiFiClient& client);;
Variables membres
WiFiServer _httpServer;
WebSocketsServer _wsServer;
uint16_t _httpPort;
uint16_t _wsPort;
Code source
// WebSocketAppBase.h
#pragma once
#include <Arduino.h>
#include <WiFi.h>
#include <WebSocketsServer.h>
// Support mDNS optionnel : selon le coeur Arduino utilisé (arduino-pico,
// ESP32, ESP8266...), la bibliothèque mDNS n'a pas le même nom d'en-tête.
// Si aucune des deux n'est disponible, beginMDNS() compile quand même mais
// ne fait rien et renvoie false (pas d'erreur de compilation bloquante).
#if __has_include(<LEAmDNS.h>)
#include <LEAmDNS.h>
#define CREPP_HAS_MDNS 1
#elif __has_include(<ESPmDNS.h>)
#include <ESPmDNS.h>
#define CREPP_HAS_MDNS 1
#else
#define CREPP_HAS_MDNS 0
#endif
namespace crepp::network {
/*
* =========================
* Tool: WebSocketAppBase
* -------------------------
* Socle commun à tout périphérique CREPP qui expose une page web servie en
* HTTP et mise à jour en temps réel via WebSocket. Regroupe UNIQUEMENT la
* mécanique de transport, strictement identique entre PicoWebTerminal et
* WebControlPanel avant ce refactor :
* - le serveur HTTP (une seule page HTML, régénérée à chaque requête)
* - la boucle et le comptage de clients du serveur WebSocket
*
* @badge network
*
* @note Classe de base interne : elle n'est pas destinée à être instanciée
* directement dans un sketch. Utilisez PicoWebTerminal ou
* WebControlPanel, qui en héritent.
*
* @note Chaque classe fille garde entièrement son propre protocole de
* messages (elle appelle _wsServer.onEvent(...) elle-même dans son
* begin()) et tout son contenu "métier" (widgets, thème, commandes
* pour PicoWebTerminal ; boutons/sliders/etc pour WebControlPanel).
* Cette base ne connaît rien du contenu de la page ni du protocole
* applicatif : seulement comment servir la page et faire tourner le
* WebSocket.
* =========================
*/
class WebSocketAppBase {
public:
/**
* @brief Construit les serveurs HTTP/WebSocket (ne démarre rien tant
* que beginServers() n'est pas appelé par la classe fille).
* @param httpPort Port du serveur HTTP.
* @param wsPort Port du serveur WebSocket.
*/
WebSocketAppBase(uint16_t httpPort, uint16_t wsPort);
virtual ~WebSocketAppBase() = default;
/**
* @brief Nombre de navigateurs actuellement connectés au WebSocket.
*/
int getConnectedClients();
/**
* @brief Adresse IP courante (point d'accès ou réseau existant, selon
* le mode WiFi actif au moment de l'appel).
*/
String getServerIP() const;
/**
* @brief Démarre un nom mDNS (ex: "robot-crepp.local") pour accéder à
* l'interface sans connaître l'adresse IP. A appeler après avoir
* connecté le WiFi (connectToWiFi()/startAP()), avant ou après
* begin()/beginServers().
* @param hostname Nom sans le suffixe ".local" (ex: "robot-crepp").
* @return true si le service mDNS a démarré. Renvoie toujours false si
* aucune bibliothèque mDNS compatible n'est disponible pour le
* coeur Arduino utilisé (voir le commentaire en tête de fichier)
* — dans ce cas, utilisez l'adresse IP donnée par getServerIP().
*/
bool beginMDNS(const String& hostname);
protected:
WiFiServer _httpServer;
WebSocketsServer _wsServer;
uint16_t _httpPort;
uint16_t _wsPort;
/**
* @brief Démarre les deux serveurs (_httpServer.begin() +
* _wsServer.begin()). A appeler dans le begin() de la classe
* fille, qui doit ensuite enregistrer son propre
* _wsServer.onEvent(...) pour son protocole applicatif.
*/
void beginServers();
/**
* @brief A appeler dans le loop() de la classe fille : accepte les
* nouvelles connexions HTTP (sert generateHtmlPage()) et fait
* avancer le WebSocket. Ne gère pas la logique métier propre à
* la classe fille (ex: animation de clignotement), qui reste à
* sa charge après cet appel.
*/
void loopServers();
/**
* @brief Génère la page HTML unique servie à chaque requête HTTP.
* Chaque classe fille fournit son propre contenu.
*/
virtual String generateHtmlPage() = 0;
private:
void handleHttpClient(WiFiClient& client);
};
} // namespace crepp::network