SimpAttributesContextHolder.setAttributes(simpAttributes); Principal user = getUser(session); publishEvent(this.eventPublisher, new SessionConnectedEvent(this, (Message<byte[]>) message, user));
@Test public void sendMessageToController() throws Exception { StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.CONNECT); this.webSocketOutputChannel.send(MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build()); Message<?> receive = this.webSocketEvents.receive(20000); assertNotNull(receive); Object event = receive.getPayload(); assertThat(event, instanceOf(SessionConnectedEvent.class)); Message<?> connectedMessage = ((SessionConnectedEvent) event).getMessage(); headers = StompHeaderAccessor.wrap(connectedMessage); assertEquals(StompCommand.CONNECTED, headers.getCommand()); headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setSubscriptionId("sub1"); headers.setDestination("/app/simple"); Message<String> message = MessageBuilder.withPayload("foo").setHeaders(headers).build(); this.webSocketOutputChannel.send(message); SimpleController controller = this.serverContext.getBean(SimpleController.class); assertTrue(controller.latch.await(20, TimeUnit.SECONDS)); assertEquals(StompCommand.SEND.name(), controller.stompCommand); }
@Test public void findSubscriptions() throws Exception { DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry(); TestPrincipal user = new TestPrincipal("joe"); Message<byte[]> message = createMessage(SimpMessageType.CONNECT_ACK, "123"); SessionConnectedEvent event = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(event); message = createMessage(SimpMessageType.SUBSCRIBE, "123", "sub1", "/match"); SessionSubscribeEvent subscribeEvent = new SessionSubscribeEvent(this, message, user); registry.onApplicationEvent(subscribeEvent); message = createMessage(SimpMessageType.SUBSCRIBE, "123", "sub2", "/match"); subscribeEvent = new SessionSubscribeEvent(this, message, user); registry.onApplicationEvent(subscribeEvent); message = createMessage(SimpMessageType.SUBSCRIBE, "123", "sub3", "/not-a-match"); subscribeEvent = new SessionSubscribeEvent(this, message, user); registry.onApplicationEvent(subscribeEvent); Set<SimpSubscription> matches = registry.findSubscriptions(new SimpSubscriptionMatcher() { @Override public boolean match(SimpSubscription subscription) { return subscription.getDestination().equals("/match"); } }); assertEquals(2, matches.size()); Iterator<SimpSubscription> iterator = matches.iterator(); Set<String> sessionIds = new HashSet<>(2); sessionIds.add(iterator.next().getId()); sessionIds.add(iterator.next().getId()); assertEquals(new HashSet<>(Arrays.asList("sub1", "sub2")), sessionIds); }
@Test public void nullSessionId() throws Exception { DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry(); TestPrincipal user = new TestPrincipal("joe"); Message<byte[]> message = createMessage(SimpMessageType.CONNECT_ACK, "123"); SessionConnectedEvent event = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(event); SimpUser simpUser = registry.getUser("joe"); assertNull(simpUser.getSession(null)); }
@Test public void addMultipleSessionIds() { DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry(); TestPrincipal user = new TestPrincipal("joe"); Message<byte[]> message = createMessage(SimpMessageType.CONNECT_ACK, "123"); SessionConnectedEvent event = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(event); message = createMessage(SimpMessageType.CONNECT_ACK, "456"); event = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(event); message = createMessage(SimpMessageType.CONNECT_ACK, "789"); event = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(event); SimpUser simpUser = registry.getUser("joe"); assertNotNull(simpUser); assertEquals(1, registry.getUserCount()); assertEquals(3, simpUser.getSessions().size()); assertNotNull(simpUser.getSession("123")); assertNotNull(simpUser.getSession("456")); assertNotNull(simpUser.getSession("789")); }
@Test public void addOneSessionId() { TestPrincipal user = new TestPrincipal("joe"); Message<byte[]> message = createMessage(SimpMessageType.CONNECT_ACK, "123"); SessionConnectedEvent event = new SessionConnectedEvent(this, message, user); DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry(); registry.onApplicationEvent(event); SimpUser simpUser = registry.getUser("joe"); assertNotNull(simpUser); assertEquals(1, registry.getUserCount()); assertEquals(1, simpUser.getSessions().size()); assertNotNull(simpUser.getSession("123")); }
@Test public void removeSessionIds() { DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry(); TestPrincipal user = new TestPrincipal("joe"); Message<byte[]> message = createMessage(SimpMessageType.CONNECT_ACK, "123"); SessionConnectedEvent connectedEvent = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(connectedEvent); message = createMessage(SimpMessageType.CONNECT_ACK, "456"); connectedEvent = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(connectedEvent); message = createMessage(SimpMessageType.CONNECT_ACK, "789"); connectedEvent = new SessionConnectedEvent(this, message, user); registry.onApplicationEvent(connectedEvent); SimpUser simpUser = registry.getUser("joe"); assertNotNull(simpUser); assertEquals(3, simpUser.getSessions().size()); CloseStatus status = CloseStatus.GOING_AWAY; message = createMessage(SimpMessageType.DISCONNECT, "456"); SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, message, "456", status, user); registry.onApplicationEvent(disconnectEvent); message = createMessage(SimpMessageType.DISCONNECT, "789"); disconnectEvent = new SessionDisconnectEvent(this, message, "789", status, user); registry.onApplicationEvent(disconnectEvent); assertEquals(1, simpUser.getSessions().size()); assertNotNull(simpUser.getSession("123")); }
this.eventPublisher.publishEvent(new SessionConnectedEvent(this, (Message<byte[]>) message));
this.eventPublisher.publishEvent(new SessionConnectedEvent(this, (Message<byte[]>) message));
@Override public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception { super.afterConnectionEstablished(webSocketSession); Principal principal = webSocketSession.getPrincipal(); if (principal != null) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor .create(SimpMessageType.MESSAGE); accessor.setSessionId(webSocketSession.getId()); publishEvent(new SessionConnectedEvent(this, MessageBuilder.createMessage( new byte[0], accessor.getMessageHeaders()), principal)); } }
SimpAttributesContextHolder.setAttributes(simpAttributes); Principal user = getUser(session); publishEvent(this.eventPublisher, new SessionConnectedEvent(this, (Message<byte[]>) message, user));
SimpAttributesContextHolder.setAttributes(simpAttributes); Principal user = getUser(session); publishEvent(this.eventPublisher, new SessionConnectedEvent(this, (Message<byte[]>) message, user));
new SessionConnectedEvent(this, MessageBuilder.createMessage(new byte[] {}, accessor.getMessageHeaders()), principal)); } else if (StompCommand.SUBSCRIBE.equals(accessor.getCommand())) { ((DefaultSimpUserRegistry) userRegistry).onApplicationEvent(