package ai.giskard.learnspringwebsockets; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.*; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.RequestUpgradeStrategy; import org.springframework.web.socket.server.support.AbstractHandshakeHandler; import java.io.IOException; import java.security.Principal; import java.util.List; import java.util.Map; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/websocket").setHandshakeHandler(new AbstractHandshakeHandler() { @Override public RequestUpgradeStrategy getRequestUpgradeStrategy() { System.out.println("public RequestUpgradeStrategy getRequestUpgradeStrategy() {"); return super.getRequestUpgradeStrategy(); } @Override public void setSupportedProtocols(String... protocols) { System.out.println("public void setSupportedProtocols(String... protocols) {"); super.setSupportedProtocols(protocols); } @Override public String[] getSupportedProtocols() { System.out.println("public String[] getSupportedProtocols() {"); return super.getSupportedProtocols(); } @Override public void start() { System.out.println("public void start() {"); super.start(); } @Override protected void doStart() { System.out.println("protected void doStart() {"); super.doStart(); } @Override public void stop() { System.out.println("public void stop() {"); super.stop(); } @Override protected void doStop() { System.out.println("protected void doStop() {"); super.doStop(); } @Override public boolean isRunning() { System.out.println("public boolean isRunning() {"); return super.isRunning(); } @Override protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOException { System.out.println("protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOException {"); super.handleInvalidUpgradeHeader(request, response); } @Override protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOException { System.out.println("protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOException {"); super.handleInvalidConnectHeader(request, response); } @Override protected boolean isWebSocketVersionSupported(WebSocketHttpHeaders httpHeaders) { httpHeaders.toSingleValueMap().forEach((k, v) -> System.out.println(k + " -> " + v)); System.out.println("protected boolean isWebSocketVersionSupported(WebSocketHttpHeaders httpHeaders) {"); return super.isWebSocketVersionSupported(httpHeaders); } @Override protected String[] getSupportedVersions() { System.out.println("protected String[] getSupportedVersions() {"); return super.getSupportedVersions(); } @Override protected void handleWebSocketVersionNotSupported(ServerHttpRequest request, ServerHttpResponse response) { System.out.println("protected void handleWebSocketVersionNotSupported(ServerHttpRequest request, ServerHttpResponse response) {"); super.handleWebSocketVersionNotSupported(request, response); } @Override protected boolean isValidOrigin(ServerHttpRequest request) { System.out.println("protected boolean isValidOrigin(ServerHttpRequest request) {"); return super.isValidOrigin(request); } @Override protected String selectProtocol(List requestedProtocols, WebSocketHandler webSocketHandler) { System.out.println("protected String selectProtocol(List requestedProtocols, WebSocketHandler webSocketHandler) {"); return super.selectProtocol(requestedProtocols, webSocketHandler); } @Override protected List filterRequestedExtensions(ServerHttpRequest request, List requestedExtensions, List supportedExtensions) { System.out.println("protected List filterRequestedExtensions(ServerHttpRequest request, List requestedExtensions, List supportedExtensions) {"); return super.filterRequestedExtensions(request, requestedExtensions, supportedExtensions); } @Override protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map attributes) { System.out.println("protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map attributes) {"); return super.determineUser(request, wsHandler, attributes); } }); } public WebSocketHandler myHandler() { return new WebSocketHandler() { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("afterConnectionEstablished"); } @Override public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { System.out.println("handleMessage"); } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { System.out.println("handleTransportError"); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { System.out.println("afterConnectionClosed"); } @Override public boolean supportsPartialMessages() { return false; } }; } }