javax.websocket
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndPointExporter() {
return new ServerEndpointExporter();
}
}
public enum WebSocketType {
ON_OPEN,
ON_MESSAGE,
ON_ERROR,
ON_CLOSE;
}
@Getter
@ToString
public class WebSocketEvent extends ApplicationEvent {
private final WebSocketType state;
private final String bizId;
private final Object data;
private final LocalDateTime dateTime;
private final String sessionId;
public WebSocketEvent(Object source, WebSocketType state, String sessionId, String bizId, Object data, LocalDateTime dateTime) {
super(source);
this.state = state;
this.sessionId = sessionId;
this.bizId = bizId;
this.data = data;
this.dateTime = dateTime;
}
public WebSocketEvent(Object source, WebSocketType state, String sessionId, String bizId, Object data) {
this(source, state, sessionId, bizId, data, LocalDateTime.now());
}
public WebSocketEvent(Object source, WebSocketType state, String sessionId, String bizId) {
this(source, state, sessionId, bizId, null, LocalDateTime.now());
}
public WebSocketEvent(Object source, WebSocketType state) {
this(source, state, null, null);
}
}
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriComponentsBuilder;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java