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<WebSocketSession> userList = new ArrayList<>();
|
|
private static final List<WebSoketMessageObserver> 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<String, Object> 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);
|
}
|
|
|
|
}
|