@Override public void onApplicationEvent(ApplicationEvent event) { AbstractSubProtocolEvent subProtocolEvent = (AbstractSubProtocolEvent) event; Message<?> message = subProtocolEvent.getMessage(); Principal user = subProtocolEvent.getUser(); if (user == null) { return;
@Override public void onApplicationEvent(AbstractSubProtocolEvent ev) { if(ev instanceof SessionSubscribeEvent) { sendHistoryToNewSubscriber(ev); } else if(ev instanceof SessionConnectEvent || ev instanceof SessionDisconnectEvent) { Authentication user = (Authentication)ev.getUser(); Object details = user.getDetails(); String sessionId = null; String address = null; if(details instanceof WebAuthenticationDetails) { WebAuthenticationDetails wad = (WebAuthenticationDetails) details; address = wad.getRemoteAddress(); sessionId = wad.getSessionId(); } if(ev instanceof SessionDisconnectEvent) { log.info("WebSocket user \"{}\" was disconnected from {} with HTTP session: {}", user.getName(), address, sessionId); } else { log.info("WebSocket user \"{}\" was connected from {} with HTTP session: {}", user.getName(), address, sessionId); } } }
private void sendHistoryToNewSubscriber(AbstractSubProtocolEvent ev) { Message<byte[]> msg = ev.getMessage(); StompHeaderAccessor ha = StompHeaderAccessor.wrap(msg); String pattern = ha.getDestination(); if(!pattern.startsWith(PREFIX)) { // we must send only to appropriate paths return; } MessageConverter messageConverter = this.simpMessagingTemplate.getMessageConverter(); for(BusData data: buses.values()) { String dest = getDestination(data.getId()); if(!this.pathMatcher.match(pattern, dest)) { continue; } for(Object obj: data.getEvents()) { StompHeaderAccessor mha = Stomp.createHeaders(ha.getSessionId(), ha.getSubscriptionId()); mha.setDestination(dest); Message<?> message = messageConverter.toMessage(obj, mha.getMessageHeaders()); clientChannel.send(message); } } }
@Override public void onApplicationEvent(ApplicationEvent event) { AbstractSubProtocolEvent subProtocolEvent = (AbstractSubProtocolEvent) event; Message<?> message = subProtocolEvent.getMessage(); Principal user = subProtocolEvent.getUser(); if (user == null) { return;
@Override public void onApplicationEvent(ApplicationEvent event) { AbstractSubProtocolEvent subProtocolEvent = (AbstractSubProtocolEvent) event; Message<?> message = subProtocolEvent.getMessage(); Principal user = subProtocolEvent.getUser(); if (user == null) { return;