build: rename package

This commit is contained in:
2026-07-14 01:20:55 +08:00
parent d14862910a
commit 5f024be736
7 changed files with 12 additions and 12 deletions

View File

@@ -0,0 +1,155 @@
package com.ttstd.signaling.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ttstd.signaling.manager.SessionManager;
import com.ttstd.signaling.model.DeviceType;
import com.ttstd.signaling.model.SignalMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
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.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class SignalWebSocketHandler extends TextWebSocketHandler {
private static final Logger logger = LoggerFactory.getLogger(SignalWebSocketHandler.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
private final SessionManager sessionManager;
public SignalWebSocketHandler(SessionManager sessionManager) {
this.sessionManager = sessionManager;
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
logger.info("New WebSocket connection: {}", session.getId());
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String payload = message.getPayload();
logger.debug("Received message: {}", payload);
try {
SignalMessage signalMessage = objectMapper.readValue(payload, SignalMessage.class);
String type = signalMessage.getType();
if (type == null) {
logger.warn("Message type is null");
return;
}
switch (type.toUpperCase()) {
case "REGISTER":
handleRegister(session, signalMessage);
break;
case "DEVICE_LIST":
handleDeviceList(session, signalMessage);
break;
case "OFFER":
case "ANSWER":
case "ICE_CANDIDATE":
case "CONTROL_COMMAND":
forwardMessage(signalMessage);
break;
default:
// 其他消息类型直接转发
forwardMessage(signalMessage);
break;
}
} catch (Exception e) {
logger.error("Error handling message: {}", e.getMessage(), e);
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
logger.info("WebSocket connection closed: {} ({})", session.getId(), status);
sessionManager.unregisterSession(session);
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
logger.error("Transport error on session {}: {}", session.getId(), exception.getMessage());
sessionManager.unregisterSession(session);
if (session.isOpen()) {
session.close(CloseStatus.SERVER_ERROR);
}
}
private void handleRegister(WebSocketSession session, SignalMessage message) {
String deviceId = message.getFromDeviceId();
String deviceTypeStr = message.getDeviceType();
if (deviceId == null || deviceTypeStr == null) {
logger.warn("Invalid REGISTER message: missing deviceId or deviceType");
return;
}
try {
DeviceType deviceType = DeviceType.valueOf(deviceTypeStr.toUpperCase());
sessionManager.registerDevice(deviceId, deviceType, session);
// 回复注册成功
Map<String, Object> response = new HashMap<>();
response.put("type", "REGISTER_SUCCESS");
response.put("deviceId", deviceId);
sendToSession(session, response);
logger.info("Device {} registered as {}", deviceId, deviceType);
} catch (IllegalArgumentException e) {
logger.warn("Invalid device type: {}", deviceTypeStr);
}
}
private void handleDeviceList(WebSocketSession session, SignalMessage message) {
List<String> controllers = sessionManager.getDevicesByType(DeviceType.CONTROLLER);
List<String> controlled = sessionManager.getDevicesByType(DeviceType.CONTROLLED);
Map<String, Object> response = new HashMap<>();
response.put("type", "DEVICE_LIST");
response.put("controllers", controllers);
response.put("controlled", controlled);
sendToSession(session, response);
}
private void forwardMessage(SignalMessage message) {
String toDeviceId = message.getToDeviceId();
if (toDeviceId == null) {
logger.warn("Cannot forward message: toDeviceId is null");
return;
}
WebSocketSession targetSession = sessionManager.getSession(toDeviceId);
if (targetSession == null || !targetSession.isOpen()) {
logger.warn("Target device {} is not online", toDeviceId);
return;
}
try {
String jsonMessage = objectMapper.writeValueAsString(message);
targetSession.sendMessage(new TextMessage(jsonMessage));
logger.debug("Forwarded {} from {} to {}", message.getType(), message.getFromDeviceId(), toDeviceId);
} catch (IOException e) {
logger.error("Error forwarding message to {}: {}", toDeviceId, e.getMessage());
}
}
private void sendToSession(WebSocketSession session, Object data) {
try {
String json = objectMapper.writeValueAsString(data);
session.sendMessage(new TextMessage(json));
} catch (IOException e) {
logger.error("Error sending message to session {}: {}", session.getId(), e.getMessage());
}
}
}