Refactoring
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user