package com.matrix.component.websoket; import com.matrix.core.tools.LogUtil; 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.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * * @ClassName: WebSocketPushHandler * @Description: 创建处理器 * @author jyy * @date 2017年9月26日 上午10:36:17 */ public class WebSocketPushHandler extends TextWebSocketHandler { private static final List userList = new ArrayList<>(); private static final List observerList=new ArrayList<>(); public WebSocketPushHandler(){ LogUtil.info("WebSocketPushHandler初始化"); //注册观察者 //addObserver(new WebSoketMessageRabbitObserver()); addObserver(new WebSoketScanQrCodeLoginObserver()); } /** * 用户进入系统监听 */ @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { LogUtil.info("用户进入系统:" + session.getAttributes()); Map map = session.getAttributes(); for (String key : map.keySet()) { LogUtil.info("key:" + key + " and value:" + map.get(key)); } observerList.forEach(item->item.userConnection(session)); userList.add(session); } /** * 处理用户请求 */ @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { LogUtil.info(session.getId()+"用户发送请求信息。。。"); observerList.forEach(item->item.handleTextMessage(session,message)); } /** * 用户退出后的处理 */ @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { if (session.isOpen()) { session.close(); } userList.remove(session); observerList.forEach(item->item.afterConnectionClosed(session,status)); LogUtil.info(session.getId()+"用户退出系统"); } /** * 自定义函数 * 给所有的在线用户发送消息 */ public static void sendMessagesToUsers(TextMessage message) { for (WebSocketSession user : userList) { try { if (user.isOpen()) { user.sendMessage(message); } } catch (IOException e) { LogUtil.error("soket发送异常",e); } } } /** * 自定义函数 * 发送消息给指定的在线用户 */ public static void sendMessageToUser(String userId, TextMessage message) { for (WebSocketSession user : userList) { if (user.getAttributes().get("userId").equals(userId)) { try { if (user.isOpen()) { user.sendMessage(message); } } catch (IOException e) { LogUtil.error("soket发送异常",e); } break; } } } /** * 添加消息观察者 * @param obj */ public static void addObserver(WebSoketMessageObserver obj) { LogUtil.info("添加消息观察者"); observerList.add(obj); } }