package com.ard.gb28181.transmit.event.sip; import com.ard.gb28181.api.bean.ErrorCallback; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit; @Data public class MessageEvent implements Delayed { /** * 超时时间(单位: 毫秒) */ private long delay; private String cmdType; private String sn; private String deviceId; private String result; private String callId; private T t; private ErrorCallback callback; @Override public long getDelay(@NotNull TimeUnit unit) { return unit.convert(delay - System.currentTimeMillis(), TimeUnit.MILLISECONDS); } @Override public int compareTo(@NotNull Delayed o) { return (int) (this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS)); } public String getKey() { return cmdType + sn; } public static MessageEvent getInstance(String cmdType, String sn, String deviceId, Long delay, ErrorCallback callback) { MessageEvent messageEvent = new MessageEvent<>(); messageEvent.cmdType = cmdType; messageEvent.sn = sn; messageEvent.deviceId = deviceId; messageEvent.callback = callback; if (delay == null) { messageEvent.delay = System.currentTimeMillis() + 1000; } else { messageEvent.delay = System.currentTimeMillis() + delay; } return messageEvent; } public static MessageEvent getInstance(String cmdType, String sn, String callId, String deviceId, Long delay, ErrorCallback callback) { MessageEvent messageEvent = new MessageEvent<>(); messageEvent.cmdType = cmdType; messageEvent.sn = sn; messageEvent.deviceId = deviceId; messageEvent.callback = callback; messageEvent.callId = callId; if (delay == null) { messageEvent.delay = System.currentTimeMillis() + 1000; } else { messageEvent.delay = System.currentTimeMillis() + delay; } return messageEvent; } }