package com.yb.message; import jakarta.annotation.PostConstruct; import jakarta.websocket.*; import jakarta.websocket.server.ServerEndpoint; import org.springframework.stereotype.*; import java.util.concurrent.atomic.*; import java.util.concurrent.*; import java.io.*; import java.util.*; import org.slf4j.*; @ServerEndpoint("/ws/asset") @Component public class WebSocketServer { private static Logger log; private static final AtomicInteger OnlineCount; private static CopyOnWriteArraySet SessionSet; @PostConstruct public void init() { // System.out.println("websocket 加载"); } @OnOpen public void onOpen(final Session session) { WebSocketServer.SessionSet.add(session); final int cnt = WebSocketServer.OnlineCount.incrementAndGet(); WebSocketServer.log.info("有连接加入,当前连接数为:{}", (Object)cnt); SendMessage(session, "连接成功"); } @OnClose public void onClose(final Session session) { WebSocketServer.SessionSet.remove(session); final int cnt = WebSocketServer.OnlineCount.decrementAndGet(); WebSocketServer.log.info("有连接关闭,当前连接数为:{}", (Object)cnt); } @OnMessage public void onMessage(final String message, final Session session) { WebSocketServer.log.info("来自客户端的消息:{}", (Object)message); SendMessage(session, "收到消息,消息内容:" + message); } @OnError public void onError(final Session session, final Throwable error) { WebSocketServer.log.error("发生错误:{},Session ID: {}", (Object)error.getMessage(), (Object)session.getId()); error.printStackTrace(); } public static void SendMessage(final Session session, final String message) { try { session.getBasicRemote().sendText(String.format("%s", message)); } catch (IOException e) { WebSocketServer.log.error("发送消息出错:{}", (Object)e.getMessage()); e.printStackTrace(); } } public static void BroadCastInfo(final String message) throws IOException { for (final Session session : WebSocketServer.SessionSet) { if (session.isOpen()) { SendMessage(session, message); } } } public static void SendMessage(final String message, final String sessionId) throws IOException { Session session = null; for (final Session s : WebSocketServer.SessionSet) { if (s.getId().equals(sessionId)) { session = s; break; } } if (session != null) { SendMessage(session, message); } else { WebSocketServer.log.warn("没有找到你指定ID的会话:{}", (Object)sessionId); } } static { WebSocketServer.log = LoggerFactory.getLogger((Class)WebSocketServer.class); OnlineCount = new AtomicInteger(0); WebSocketServer.SessionSet = new CopyOnWriteArraySet(); } }