CollisionAvoidanceSystem/src/main/java/com/dongni/collisionavoidance/webSocket/message/WebSocketMessage.java

93 lines
2.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}