package com.ssyf.ws.domain;


import lombok.Data;
import lombok.experimental.Accessors;


/**
 * WebSocket消息实体
 * 统一的消息格式定义
 */
@Data
@Accessors(chain = true)
public class WsMessage<T> implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    // 命令类型
    private String command;

    private String msg;

    /**
     * 业务数据负载 (Payload)
     * 泛型 T 允许我们为不同的命令定义不同的业务数据结构。
     * 例如，发送消息时，T 可以是包含接收者ID和消息内容的对象。
     */
    private T data;

    /**
     * 序列ID (Sequence ID)
     * 用于标识消息的唯一性，通常由客户端生成。
     * 服务端在响应时会回传此ID，便于客户端进行请求-响应的匹配，尤其是在异步通信中。
     */
    private Long sequenceId;

    /**
     * 认证令牌 (Authentication Token)
     * 对于需要用户登录后才能操作的命令，客户端必须在此字段中携带有效的Token。
     * 服务端通过此Token来识别用户身份。
     */
    private String token;

    // 时间戳
    private Long timestamp = System.currentTimeMillis();
    /**
     * 状态；
     * 0 成功；
     * 反之失败
     */
    private int status;
}