package com.dji.sample.component.websocket.config; import com.dji.sample.component.websocket.model.WebSocketManager; import com.dji.sample.component.websocket.service.ISendMessageService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.WebSocketHandlerDecorator; import java.security.Principal; /** * * @author sean.zhou * @date 2021/11/16 * @version 0.1 */ @Slf4j public class WebSocketDefaultHandler extends WebSocketHandlerDecorator { @Autowired private ISendMessageService sendMessageService; WebSocketDefaultHandler(WebSocketHandler delegate) { super(delegate); } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { Principal principal = session.getPrincipal(); if (StringUtils.hasText(principal.getName())) { WebSocketManager.put(principal.getName(), new ConcurrentWebSocketSession(session)); log.debug("{} is connected. ID: {}. WebSocketSession[current count: {}]", principal.getName(), session.getId(), WebSocketManager.getConnectedCount()); return; } session.close(); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { Principal principal = session.getPrincipal(); if (StringUtils.hasText(principal.getName())) { WebSocketManager.remove(principal.getName(), session.getId()); log.debug("{} is disconnected. ID: {}. WebSocketSession[current count: {}]", principal.getName(), session.getId(), WebSocketManager.getConnectedCount()); } } @Override public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { log.debug("received message: {}", message.getPayload()); } }