package com.qianwen.core.websocket.config;
|
|
import cn.hutool.json.JSONUtil;
|
import java.io.IOException;
|
import java.util.Collection;
|
import java.util.Set;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.core.websocket.holder.WebSocketSessionHolder;
|
import com.qianwen.core.websocket.message.JsonWebSocketMessage;
|
import org.springframework.web.socket.TextMessage;
|
import org.springframework.web.socket.WebSocketSession;
|
|
public class WebSocketMessageSender {
|
private static final Logger log = LoggerFactory.getLogger(WebSocketMessageSender.class);
|
|
public static void broadcast(String message) {
|
Collection<WebSocketSession> sessions = WebSocketSessionHolder.getSessions();
|
for (WebSocketSession session : sessions) {
|
send(session, message);
|
}
|
}
|
|
public static boolean send(Object sessionKey, String message) {
|
Set<WebSocketSession> session = WebSocketSessionHolder.getSession(sessionKey);
|
if (Func.isEmpty(session)) {
|
log.info("[send] 当前 sessionKey:{} 对应 session 不在本服务中", sessionKey);
|
return false;
|
}
|
session.forEach(item -> {
|
send(item, message);
|
});
|
return true;
|
}
|
|
public static void send(WebSocketSession session, JsonWebSocketMessage message) {
|
send(session, JSONUtil.toJsonStr(message));
|
}
|
|
public static boolean send(WebSocketSession session, String message) {
|
if (session == null) {
|
log.error("[send] session 为 null");
|
return false;
|
} else if (!session.isOpen()) {
|
log.error("[send] session 已经关闭");
|
return false;
|
} else {
|
try {
|
synchronized (session) {
|
session.sendMessage(new TextMessage(message));
|
}
|
return true;
|
} catch (IOException e) {
|
log.error("[send] session({}) 发送消息({}) 异常", new Object[]{session, message, e});
|
return false;
|
}
|
}
|
}
|
}
|