feat: 增加网页后台管理
This commit is contained in:
@@ -3,6 +3,7 @@ package com.ttstd.signaling.handler;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.ttstd.signaling.manager.ConnectionRequestManager;
|
||||
import com.ttstd.signaling.manager.SessionManager;
|
||||
import com.ttstd.signaling.manager.SignalMetrics;
|
||||
import com.ttstd.signaling.model.DeviceType;
|
||||
import com.ttstd.signaling.model.SignalMessage;
|
||||
import org.slf4j.Logger;
|
||||
@@ -26,10 +27,14 @@ public class SignalWebSocketHandler extends TextWebSocketHandler {
|
||||
|
||||
private final SessionManager sessionManager;
|
||||
private final ConnectionRequestManager connectionRequestManager;
|
||||
private final SignalMetrics metrics;
|
||||
|
||||
public SignalWebSocketHandler(SessionManager sessionManager, ConnectionRequestManager connectionRequestManager) {
|
||||
public SignalWebSocketHandler(SessionManager sessionManager,
|
||||
ConnectionRequestManager connectionRequestManager,
|
||||
SignalMetrics metrics) {
|
||||
this.sessionManager = sessionManager;
|
||||
this.connectionRequestManager = connectionRequestManager;
|
||||
this.metrics = metrics;
|
||||
this.connectionRequestManager.setSender(this::sendToDevice);
|
||||
}
|
||||
|
||||
@@ -54,6 +59,7 @@ public class SignalWebSocketHandler extends TextWebSocketHandler {
|
||||
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
||||
String payload = message.getPayload();
|
||||
logger.debug("Received message: {}", payload);
|
||||
metrics.incMessage();
|
||||
|
||||
try {
|
||||
SignalMessage signalMessage = objectMapper.readValue(payload, SignalMessage.class);
|
||||
@@ -75,16 +81,19 @@ public class SignalWebSocketHandler extends TextWebSocketHandler {
|
||||
// 客户端心跳保活消息,无需处理,仅用于防止中间代理因空闲超时断开连接
|
||||
break;
|
||||
case "OFFER":
|
||||
metrics.incOffer();
|
||||
// 连接请求:统一经 ConnectionRequestManager 做校验/去重/待确认跟踪后再转发
|
||||
handleConnectionRequest(signalMessage);
|
||||
break;
|
||||
case "ANSWER":
|
||||
metrics.incAnswer();
|
||||
// 被控端已接受:清理待确认状态并转发 Answer 给主控端
|
||||
connectionRequestManager.completePendingRequest(
|
||||
signalMessage.getToDeviceId(), signalMessage.getFromDeviceId());
|
||||
forwardMessage(signalMessage, true);
|
||||
break;
|
||||
case "CONNECTION_REJECTED":
|
||||
metrics.incRejected();
|
||||
// 被控端已拒绝:清理待确认状态并转发拒绝通知给主控端
|
||||
connectionRequestManager.completePendingRequest(
|
||||
signalMessage.getToDeviceId(), signalMessage.getFromDeviceId());
|
||||
@@ -109,12 +118,14 @@ public class SignalWebSocketHandler extends TextWebSocketHandler {
|
||||
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
|
||||
logger.info("WebSocket connection closed: {} ({})", session.getId(), status);
|
||||
sessionManager.unregisterSession(session);
|
||||
metrics.recordSessionCount(sessionManager.getOnlineCount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
|
||||
logger.error("Transport error on session {}: {}", session.getId(), exception.getMessage());
|
||||
sessionManager.unregisterSession(session);
|
||||
metrics.recordSessionCount(sessionManager.getOnlineCount());
|
||||
if (session.isOpen()) {
|
||||
session.close(CloseStatus.SERVER_ERROR);
|
||||
}
|
||||
@@ -132,6 +143,8 @@ public class SignalWebSocketHandler extends TextWebSocketHandler {
|
||||
try {
|
||||
DeviceType deviceType = DeviceType.valueOf(deviceTypeStr.toUpperCase());
|
||||
sessionManager.registerDevice(deviceId, deviceType, session);
|
||||
metrics.incRegistered();
|
||||
metrics.recordSessionCount(sessionManager.getOnlineCount());
|
||||
|
||||
// 回复注册成功
|
||||
Map<String, Object> response = new HashMap<>();
|
||||
|
||||
Reference in New Issue
Block a user