package com.smtaiserver.smtaiserver.web; import java.util.Collections; import java.util.HashSet; import java.util.Set; 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; @Component public class SMTWebSocketHandler extends TextWebSocketHandler { private final Set sessions = Collections.synchronizedSet(new HashSet<>()); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.add(session); System.out.println("Client connected: " + session.getId()); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); System.out.println("Received message from " + session.getId() + ": " + payload); // Broadcast message to all connected clients for (WebSocketSession s : sessions) { if (s.isOpen()) { s.sendMessage(new TextMessage(payload)); } } } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session); System.out.println("Client disconnected: " + session.getId()); } public void broadcast(String message) { synchronized (sessions) { for (WebSocketSession session : sessions) { if (session.isOpen()) { try { session.sendMessage(new TextMessage(message)); } catch (Exception e) { e.printStackTrace(); } } } } } }