MeetingDeviceWebSocketController.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.usky.meeting.websocket;
  2. import com.usky.common.core.bean.ApiResult;
  3. import com.usky.meeting.service.MeetingDeviceWebSocketService;
  4. import com.usky.meeting.service.vo.WebSocketConnectionResponseVO;
  5. import lombok.RequiredArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.bind.annotation.*;
  10. import java.time.LocalDateTime;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. @Slf4j
  14. @Controller
  15. @RequiredArgsConstructor
  16. @RequestMapping("/meetingDevice/websocket")
  17. public class MeetingDeviceWebSocketController {
  18. @Autowired
  19. private MeetingDeviceWebSocketService deviceWebSocketService;
  20. @GetMapping("/connect")
  21. @ResponseBody
  22. public ApiResult<WebSocketConnectionResponseVO> connect(
  23. @RequestParam String deviceCode
  24. //,@RequestHeader(value = "X-Real-IP", required = false) String realIp
  25. ) {
  26. log.info("收到WebSocket连接请求, deviceCode: {}", deviceCode);
  27. WebSocketConnectionResponseVO response = new WebSocketConnectionResponseVO();
  28. try {
  29. Map<String, Object> validateResult = deviceWebSocketService.validateDevice(deviceCode);
  30. response.setDeviceCode(deviceCode);
  31. response.setDeviceName((String) validateResult.get("deviceName"));
  32. response.setDeviceStatus((Integer) validateResult.get("deviceStatus"));
  33. response.setIsOnline((Boolean) validateResult.get("isOnline"));
  34. response.setMessage("设备验证通过,可建立WebSocket连接");
  35. response.setTimestamp(System.currentTimeMillis());
  36. log.info("设备验证成功, deviceCode: {}", deviceCode);
  37. return ApiResult.success(response);
  38. } catch (Exception e) {
  39. log.error("设备验证失败, deviceCode: {}", deviceCode, e);
  40. response.setDeviceCode(deviceCode);
  41. response.setMessage("设备验证失败: " + e.getMessage());
  42. response.setTimestamp(System.currentTimeMillis());
  43. return ApiResult.error(e.getMessage());
  44. }
  45. }
  46. @GetMapping("/status/{sessionId}")
  47. @ResponseBody
  48. public ApiResult<Map<String, Object>> getConnectionStatus(@PathVariable String sessionId) {
  49. Map<String, Object> status = new HashMap<>();
  50. boolean isOpen = MeetingDeviceWebSocketHandler.isSessionOpen(sessionId);
  51. String deviceCode = MeetingDeviceWebSocketHandler.getDeviceCodeBySession(sessionId);
  52. status.put("sessionId", sessionId);
  53. status.put("deviceCode", deviceCode);
  54. status.put("isOpen", isOpen);
  55. status.put("checkTime", LocalDateTime.now().toString());
  56. return ApiResult.success(status);
  57. }
  58. @GetMapping("/close/{sessionId}")
  59. @ResponseBody
  60. public ApiResult<Void> closeConnection(@PathVariable String sessionId) {
  61. MeetingDeviceWebSocketHandler.removeSession(sessionId);
  62. log.info("WebSocket连接已手动关闭, sessionId: {}", sessionId);
  63. return ApiResult.success();
  64. }
  65. }