🔌 Protocole WebSocket MateZone
Documentation technique complète du protocole de communication temps réel entre client et serveur.
Vue d'ensemble du protocole
MateZone utilise un protocole WebSocket structuré basé sur JSON pour assurer une communication fiable
ChatEventDTO
Classe principale de transfert de données responsable de la structure des événements de chat échangés en JSON.
EventEnum
Énumération définissant les types d'événements et leurs clés de données requises pour garantir la cohérence.
Structure ChatEventDTO
Anatomie complète de la classe principale de communication
// Structure générale d'un ChatEventDTO
{
"type": "MESSAGE", // Type d'événement (EventEnum)
"data": { // Map des données
"idClient": "user123",
"pseudo": "Alice",
"contenu": "Hello World!",
"date": "2024-01-15T10:30:00Z"
},
"lstEventDTO": [] // Liste optionnelle d'autres ChatEventDTO
}
🎯 Type
Définit le type d'événement selon l'énumération EventEnum. Détermine les clés de
données requises.
📊 Data
Map clé-valeur contenant les données spécifiques à l'événement selon son type.
📋 LstEventDTO
Liste optionnelle d'événements, utilisée principalement pour MESSAGE_LIST.
Types d'événements (EventEnum)
Catalogue complet des événements supportés par le protocole
🔐 Authentification
LOGIN
Clés requises : pseudo, mot de passe
{
"type": "LOGIN",
"data": {
"pseudo": "alice",
"motDePasse": "secretPassword"
}
}
SIGNUP
Clés requises : pseudo, mot de passe
{
"type": "SIGNUP",
"data": {
"pseudo": "newUser",
"motDePasse": "newPassword"
}
}
SUCCESS_LOGIN
Clés requises : identifiant utilisateur, pseudo
SUCCESS_SIGNUP
Clés requises : identifiant utilisateur, pseudo
💬 Messages
MESSAGE
Clés requises : identifiant client, pseudo, contenu, date
{
"type": "MESSAGE",
"data": {
"idClient": "user123",
"pseudo": "Alice",
"contenu": "Bonjour !",
"date": "2024-11-11T10:30:00Z"
}
}
NEW_MESSAGE
Clés requises : identifiant client, identifiant canal, contenu
NEW_MESSAGE_IMG
Clés requises : identifiant groupe, identifiant client, données binaires
MESSAGE_LIST
Utilise lstEventDTO - Aucune clé data requise
📡 Canaux
NEW_CHANNEL
Clés requises : identifiant du canal
{
"type": "NEW_CHANNEL",
"data": {
"idCanal": "channel_001"
}
}
⚠️ Réponses système
SUCCESS
Clés requises : message de succès
ERROR
Clés requises : message d'erreur
{
"type": "ERROR",
"data": {
"messageErreur": "Connexion échouée"
}
}
API ChatEventDTO
Méthodes principales pour manipuler les événements de chat
🔧 Construction
// Constructeurs
ChatEventDTO()
ChatEventDTO(EventEnum type)
ChatEventDTO(EventEnum type, List<ChatEventDTO> lstEventDTO)
// Ajout de données (pattern Builder)
ChatEventDTO add(String key, Object value)
// Exemple d'utilisation
ChatEventDTO event = new ChatEventDTO(EventEnum.NEW_MESSAGE)
.add("idClient", "user123")
.add("idCanal", "channel1")
.add("contenu", "Hello!");
🔄 Sérialisation JSON
// Vers JSON
String json = event.toJson();
// Depuis JSON
ChatEventDTO event = ChatEventDTO.jsonToEventDTO(jsonString);
// Depuis JSON avec liste d'événements
ChatEventDTO eventWithList =
ChatEventDTO.jsonToLstEventDTO(jsonString);
📊 Accès aux données
// Accès aux données
Map<String, Object> data = event.getData();
Object value = event.getDataIndex(0); // Par index
List<ChatEventDTO> messages = event.getLstMes();
// Getters/Setters
EventEnum type = event.getType();
event.setType(EventEnum.MESSAGE);
event.setData(dataMap);
🔍 Validation EventEnum
// Récupération des clés requises
List<String> requiredKeys = EventEnum.LOGIN.getRequiredKeys();
// Résultat: ["pseudo", "motDePasse"]
// Accès par index
String keyName = EventEnum.MESSAGE.getKeyIndex(0);
// Résultat: "idClient"
Flux de communication typiques
Exemples concrets d'échanges client-serveur
🔐 Séquence de connexion
- Client → Serveur : LOGIN
{ "type": "LOGIN", "data": { "pseudo": "alice", "motDePasse": "secret123" } } - Serveur → Client : SUCCESS_LOGIN
{ "type": "SUCCESS_LOGIN", "data": { "idUtilisateur": "user_456", "pseudo": "alice" } }
💬 Séquence de message
- Client → Serveur : NEW_MESSAGE
{ "type": "NEW_MESSAGE", "data": { "idClient": "user_456", "idCanal": "general", "contenu": "Salut tout le monde !" } } - Serveur → Tous les clients : MESSAGE
{ "type": "MESSAGE", "data": { "idClient": "user_456", "pseudo": "alice", "contenu": "Salut tout le monde !", "date": "2024-11-11T15:30:45Z" } }
Gestion d'erreurs et bonnes pratiques
Comment le protocole gère les erreurs et assure la robustesse
Types d'erreurs
- Authentification échouée
- Données manquantes
- Format JSON invalide
- Type d'événement non reconnu
- Erreur serveur
Validation
Le protocole valide automatiquement :
- Structure JSON correcte
- Présence du champ type
- Clés requises selon EventEnum
- Types de données cohérents
Bonnes pratiques
- Toujours vérifier le type d'événement
- Gérer les erreurs côté client
- Utiliser les constructors adaptés
- Valider les données avant envoi
⚠️ Important
Tous les échanges doivent respecter la structure ChatEventDTO. Les messages mal formés seront rejetés par le serveur avec un événement ERROR contenant les détails de l'erreur.