Refactoring

This commit is contained in:
dahoud
2026-02-04 01:06:17 +00:00
parent 40de25315c
commit c31c6174cc
19 changed files with 360 additions and 70 deletions

View File

@@ -11,6 +11,7 @@ import jakarta.inject.Inject;
import com.lions.dev.service.PresenceService;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -59,6 +60,10 @@ public class NotificationWebSocketNext {
// Marquer l'utilisateur comme en ligne
presenceService.setUserOnline(userUUID);
// Envoyer au client la liste des utilisateurs déjà en ligne (snapshot)
// pour qu'il affiche correctement "En ligne" sans attendre les events Kafka
sendPresenceSnapshotTo(connection);
} catch (IllegalArgumentException e) {
Log.error("[WS-NEXT] UUID invalide: " + userId, e);
@@ -216,6 +221,27 @@ public class NotificationWebSocketNext {
" sessions sur " + totalSessions);
}
/**
* Envoie à une connexion la liste de tous les utilisateurs actuellement en ligne.
* Appelé à l'onOpen pour que le client affiche tout de suite le bon statut.
*/
private static void sendPresenceSnapshotTo(WebSocketConnection connection) {
if (!connection.isOpen()) return;
try {
for (UUID onlineUserId : userConnections.keySet()) {
Map<String, Object> presenceData = new HashMap<>();
presenceData.put("userId", onlineUserId.toString());
presenceData.put("isOnline", true);
presenceData.put("timestamp", System.currentTimeMillis());
String json = buildJsonMessage("presence", presenceData);
connection.sendText(json);
}
Log.debug("[WS-NEXT] Snapshot présence envoyé (" + userConnections.size() + " utilisateur(s) en ligne)");
} catch (Exception e) {
Log.error("[WS-NEXT] Erreur envoi snapshot présence", e);
}
}
/**
* Broadcast une mise à jour de présence à tous les utilisateurs connectés.
*