package com.qianwen.core.websocket.holder; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.WebSocketHandlerDecorator; /** * 一个WebSocketHandler,(装饰器模式),处理WebSocketSession的存取和关闭 */ public class MapSessionWebSocketHandlerDecorator extends WebSocketHandlerDecorator { private final SessionKeyGenerator sessionKeyGenerator; public MapSessionWebSocketHandlerDecorator(WebSocketHandler delegate, SessionKeyGenerator sessionKeyGenerator) { super(delegate); this.sessionKeyGenerator = sessionKeyGenerator; } public void afterConnectionEstablished(final WebSocketSession session) throws Exception { Object sessionKey = this.sessionKeyGenerator.sessionKey(session); WebSocketSessionHolder.addSession(sessionKey, session); } public void afterConnectionClosed(final WebSocketSession session, CloseStatus closeStatus) throws Exception { Object sessionKey = this.sessionKeyGenerator.sessionKey(session); WebSocketSessionHolder.removeSession(sessionKey, session); JsonMessageFilterHolder.closeSession(session); } }