Some checks failed
Deploy Spring Boot App / build-and-deploy (push) Has been cancelled
53 lines
1.8 KiB
Java
53 lines
1.8 KiB
Java
package com.example.fercoganbackend.component;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.socket.CloseStatus;
|
|
import org.springframework.web.socket.TextMessage;
|
|
import org.springframework.web.socket.WebSocketSession;
|
|
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
|
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
|
|
@Component
|
|
public class EventoWebSocketHandler extends TextWebSocketHandler {
|
|
|
|
private final Map<String, Set<WebSocketSession>> sesionesPorRemate = new ConcurrentHashMap<>();
|
|
|
|
@Override
|
|
public void afterConnectionEstablished(WebSocketSession session) {
|
|
String remateId = session.getUri().getPath().split("/")[3];
|
|
|
|
sesionesPorRemate
|
|
.computeIfAbsent(remateId, k -> new CopyOnWriteArraySet<>())
|
|
.add(session);
|
|
|
|
System.out.println("[EVENTOS] Cliente conectado al remate: " + remateId);
|
|
}
|
|
|
|
@Override
|
|
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
|
|
String remateId = session.getUri().getPath().split("/")[3];
|
|
sesionesPorRemate.getOrDefault(remateId, Set.of()).remove(session);
|
|
System.out.println("[EVENTOS] Cliente desconectado: " + remateId);
|
|
}
|
|
|
|
public void enviarEvento(String remateId, String mensaje) {
|
|
Set<WebSocketSession> sesiones = sesionesPorRemate.get(remateId);
|
|
if (sesiones == null) return;
|
|
|
|
for (WebSocketSession session : sesiones) {
|
|
try {
|
|
if (session.isOpen()) {
|
|
session.sendMessage(new TextMessage(mensaje));
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|