package com.dongni.collisionavoidance.webSocket.message; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; import lombok.Builder; /** * WebSocket统一消息封装类 * 与前端JSON格式完全兼容 * * @param 消息载荷类型 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class WebSocketMessage { /** * 消息类型 (position_update, vehicle_command等) */ @JsonProperty("type") private String type; /** * 微秒级时间戳 */ @JsonProperty("timestamp") private Long timestamp; /** * 消息唯一ID (可选) */ @JsonProperty("messageId") private String messageId; /** * 消息载荷 (JSON格式的具体数据) * 根据消息类型,payload可能包含: * - 位置更新: object_id, object_type, position, heading, speed * - 车辆指令: vehicleId, vehicleType, commandType, reason等 * - 红绿灯状态: intersection_id, position, ns_status, ew_status * - 碰撞预警: object1_id, object2_id, risk_level, distance等 */ @JsonProperty("payload") private T payload; /** * 为位置更新消息创建便捷方法 */ public static WebSocketMessage positionUpdate(T payload) { return WebSocketMessage.builder() .type("position_update") .timestamp(System.nanoTime() / 1000) // 转换为微秒 .payload(payload) .build(); } /** * 为车辆指令消息创建便捷方法 */ public static WebSocketMessage vehicleCommand(T payload) { return WebSocketMessage.builder() .type("vehicle_command") .timestamp(System.nanoTime() / 1000) .payload(payload) .build(); } /** * 为红绿灯状态消息创建便捷方法 */ public static WebSocketMessage trafficLightStatus(T payload) { return WebSocketMessage.builder() .type("intersection_traffic_light_status") .timestamp(System.nanoTime() / 1000) .payload(payload) .build(); } /** * 为碰撞预警消息创建便捷方法 */ public static WebSocketMessage collisionWarning(T payload) { return WebSocketMessage.builder() .type("collision_warning") .timestamp(System.nanoTime() / 1000) .payload(payload) .build(); } }