93 lines
2.6 KiB
Java
93 lines
2.6 KiB
Java
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 <T> 消息载荷类型
|
||
*/
|
||
@Data
|
||
@Builder
|
||
@NoArgsConstructor
|
||
@AllArgsConstructor
|
||
public class WebSocketMessage<T> {
|
||
|
||
/**
|
||
* 消息类型 (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 <T> WebSocketMessage<T> positionUpdate(T payload) {
|
||
return WebSocketMessage.<T>builder()
|
||
.type("position_update")
|
||
.timestamp(System.nanoTime() / 1000) // 转换为微秒
|
||
.payload(payload)
|
||
.build();
|
||
}
|
||
|
||
/**
|
||
* 为车辆指令消息创建便捷方法
|
||
*/
|
||
public static <T> WebSocketMessage<T> vehicleCommand(T payload) {
|
||
return WebSocketMessage.<T>builder()
|
||
.type("vehicle_command")
|
||
.timestamp(System.nanoTime() / 1000)
|
||
.payload(payload)
|
||
.build();
|
||
}
|
||
|
||
/**
|
||
* 为红绿灯状态消息创建便捷方法
|
||
*/
|
||
public static <T> WebSocketMessage<T> trafficLightStatus(T payload) {
|
||
return WebSocketMessage.<T>builder()
|
||
.type("intersection_traffic_light_status")
|
||
.timestamp(System.nanoTime() / 1000)
|
||
.payload(payload)
|
||
.build();
|
||
}
|
||
|
||
/**
|
||
* 为碰撞预警消息创建便捷方法
|
||
*/
|
||
public static <T> WebSocketMessage<T> collisionWarning(T payload) {
|
||
return WebSocketMessage.<T>builder()
|
||
.type("collision_warning")
|
||
.timestamp(System.nanoTime() / 1000)
|
||
.payload(payload)
|
||
.build();
|
||
}
|
||
} |