¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.lf.server.service.all; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.websocket.*; |
| | | import javax.websocket.server.ServerEndpoint; |
| | | import java.io.IOException; |
| | | import java.util.concurrent.CopyOnWriteArraySet; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | |
| | | /** |
| | | * WebSocketæå¡ç±» |
| | | * @author WWW |
| | | */ |
| | | @ServerEndpoint(value = "/ws/select") |
| | | @Component |
| | | public class WebSocketService { |
| | | @PostConstruct |
| | | public void init() { |
| | | System.out.println("websocket å è½½"); |
| | | } |
| | | |
| | | private static Logger log = LoggerFactory.getLogger(WebSocketService.class); |
| | | |
| | | private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(0); |
| | | |
| | | /** |
| | | * ç¨æ¥åæ¾æ¯ä¸ªå®¢æ·ç«¯å¯¹åºçSession对象ï¼çº¿ç¨å®å
¨Setï¼ |
| | | */ |
| | | private static CopyOnWriteArraySet<Session> SessionSet = new CopyOnWriteArraySet<Session>(); |
| | | |
| | | /** |
| | | * è¿æ¥å»ºç«æåè°ç¨çæ¹æ³ |
| | | */ |
| | | @OnOpen |
| | | public void onOpen(Session session) { |
| | | SessionSet.add(session); |
| | | |
| | | int cnt = ONLINE_COUNT.incrementAndGet(); |
| | | log.info("æè¿æ¥å å
¥ï¼å½åè¿æ¥æ°ä¸ºï¼{}", cnt); |
| | | sendMessage(session, "è¿æ¥æå"); |
| | | } |
| | | |
| | | /** |
| | | * è¿æ¥å
³éè°ç¨çæ¹æ³ |
| | | */ |
| | | @OnClose |
| | | public void onClose(Session session) { |
| | | SessionSet.remove(session); |
| | | |
| | | int cnt = ONLINE_COUNT.decrementAndGet(); |
| | | log.info("æè¿æ¥å
³éï¼å½åè¿æ¥æ°ä¸ºï¼{}", cnt); |
| | | } |
| | | |
| | | /** |
| | | * æ¶å°å®¢æ·ç«¯æ¶æ¯åè°ç¨çæ¹æ³ |
| | | * |
| | | * @param message 客æ·ç«¯åéè¿æ¥çæ¶æ¯ |
| | | */ |
| | | @OnMessage |
| | | public void onMessage(String message, Session session) { |
| | | log.info("æ¥èªå®¢æ·ç«¯çæ¶æ¯ï¼{}", message); |
| | | sendMessage(session, "æ¶å°æ¶æ¯ï¼æ¶æ¯å
容ï¼" + message); |
| | | } |
| | | |
| | | /** |
| | | * åºç°é误 |
| | | * |
| | | * @param session |
| | | * @param error |
| | | */ |
| | | @OnError |
| | | public void onError(Session session, Throwable error) { |
| | | log.error("åçé误ï¼{}ï¼Session IDï¼ {}", error.getMessage(), session.getId()); |
| | | error.printStackTrace(); |
| | | } |
| | | |
| | | /** |
| | | * åéæ¶æ¯ï¼å®è·µè¡¨æï¼æ¯æ¬¡æµè§å¨å·æ°ï¼sessionä¼åçååã |
| | | * |
| | | * @param session |
| | | * @param message |
| | | */ |
| | | public static void sendMessage(Session session, String message) { |
| | | try { |
| | | session.getBasicRemote().sendText(String.format("%s", message)); |
| | | } catch (IOException e) { |
| | | log.error("åéæ¶æ¯åºéï¼{}", e.getMessage()); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ç¾¤åæ¶æ¯ |
| | | * |
| | | * @param message |
| | | * @throws IOException |
| | | */ |
| | | public static void broadCastInfo(String message) throws IOException { |
| | | for (Session session : SessionSet) { |
| | | if (session.isOpen()) { |
| | | sendMessage(session, message); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æå®Sessionåéæ¶æ¯ |
| | | * |
| | | * @param sessionId |
| | | * @param message |
| | | * @throws IOException |
| | | */ |
| | | public static void sendMessage(String message, String sessionId) throws IOException { |
| | | Session session = null; |
| | | for (Session s : SessionSet) { |
| | | if (s.getId().equals(sessionId)) { |
| | | session = s; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (session != null) { |
| | | sendMessage(session, message); |
| | | } else { |
| | | log.warn("æ²¡ææ¾å°ä½ æå®IDçä¼è¯ï¼{}", sessionId); |
| | | } |
| | | } |
| | | } |