se añadio websocket para terminar el remate
Some checks failed
Deploy Spring Boot App / build-and-deploy (push) Has been cancelled

This commit is contained in:
2025-11-29 10:46:26 -04:00
commit f1077c108c
53 changed files with 2932 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
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();
}
}
}
}