🔌 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.

Format standardisé pour tous les échanges client-serveur
🏷️

EventEnum

Énumération définissant les types d'événements et leurs clés de données requises pour garantir la cohérence.

Validation automatique des messages échangés

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

  1. Client → Serveur : LOGIN
    {
      "type": "LOGIN",
      "data": {
        "pseudo": "alice",
    	    "mdp": "secret123"
      }
    }
  2. Serveur → Client : SUCCESS_LOGIN
    {
      "type": "SUCCESS_LOGIN",
      "data": {
    		    "id": "user_456",
        "pseudo": "alice"
      }
    }

💬 Séquence de message

  1. Client → Serveur : NEW_MESSAGE
    {
      "type": "NEW_MESSAGE",
      "data": {
        "idClient": "user_456",
    		"idChannel": "general",
        "contenu": "Salut tout le monde !"
      }
    }
  2. 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.