🔌 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, mdp
{
"type": "LOGIN",
"data": {
"pseudo": "alice",
"mdp": "secretPassword"
}
}
SIGNUP
Clés requises : pseudo, mdp
{
"type": "SIGNUP",
"data": {
"pseudo": "newUser",
"mdp": "newPassword"
}
}
SUCCESS_LOGIN
Clés requises : id (identifiant utilisateur), pseudo
SUCCESS_SIGNUP
Clés requises : id (identifiant utilisateur), pseudo
💬 Messages
MESSAGE
Clés requises : idClient, pseudo, contenu, date
{
"type": "MESSAGE",
"data": {
"idClient": "user123",
"pseudo": "Alice",
"contenu": "Bonjour !",
"date": "2024-11-11T10:30:00Z"
}
}
NEW_MESSAGE
Clés requises : idClient, idChannel, contenu
NEW_MESSAGE_IMG
Clés requises : IdGroupe, idClient, byte
MESSAGE_LIST
Utilise lstEventDTO - Aucune clé data requise
📡 Canaux
NEW_CHANNEL
Clés requises : idChannel
{
"type": "NEW_CHANNEL",
"data": {
"idChannel": "channel_001"
}
}
PERMS_CHANNELS
Clés requises : aucune (utilise lstEventDTO)
PERM_CHANNEL
Clés requises : idChannel, nomChannel
{
"type": "PERM_CHANNEL",
"data": {
"idChannel": "channel_001",
"nomChannel": "Général"
}
}
CHANGER_CHANNEL
Clés requises : idChannel
⚠️ Réponses système
SUCCESS
Clés requises : message (message de succès)
ERROR
Clés requises : message (message d'erreur)
{
"type": "ERROR",
"data": {
"message": "Connexion échouée"
}
}
📋 Récapitulatif EventEnum → clés requises
Ce tableau synthétise l'énumération EventEnum et les clés attendues dans
data
pour chaque type d'événement.
| Type (EventEnum) | Description | Clés requises dans data |
|---|---|---|
LOGIN |
Connexion d'un utilisateur existant | pseudo, mdp |
SIGNUP |
Inscription d'un nouvel utilisateur | pseudo, mdp |
SUCCESS_LOGIN |
Retour succès après connexion | id, pseudo |
SUCCESS_SIGNUP |
Retour succès après inscription | id, pseudo |
NEW_CHANNEL |
Demande de connexion / création de canal | idChannel |
MESSAGE |
Message complet diffusé dans un canal | idClient, pseudo, contenu, date
|
MESSAGE_LIST |
Liste de messages (utilise lstEventDTO) |
Aucune (liste d'événements) |
NEW_MESSAGE |
Envoi d'un nouveau message texte | idClient, idChannel, contenu |
NEW_MESSAGE_IMG |
Envoi d'un message avec image | IdGroupe, idClient, byte |
SUCCESS |
Retour générique de succès | message |
ERROR |
Retour d'erreur avec détail | message |
PERMS_CHANNELS |
Liste des canaux accessibles à l'utilisateur | Aucune (utilise lstEventDTO) |
PERM_CHANNEL |
Détail d'un canal avec ses permissions | idChannel, nomChannel |
CHANGER_CHANNEL |
Changement de canal côté client | idChannel |
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("idChannel", "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);
Flux de communication typiques
Exemples concrets d'échanges client-serveur
🔐 Séquence de connexion
- Client → Serveur : LOGIN
{ "type": "LOGIN", "data": { "pseudo": "alice", "mdp": "secret123" } } - Serveur → Client : SUCCESS_LOGIN
{ "type": "SUCCESS_LOGIN", "data": { "id": "user_456", "pseudo": "alice" } }
💬 Séquence de message
- Client → Serveur : NEW_MESSAGE
{ "type": "NEW_MESSAGE", "data": { "idClient": "user_456", "idChannel": "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.