/** * Further initialize the StompHeaders, for example setting the heart-beat * header if necessary. * @param connectHeaders the headers to modify * @return the modified headers */ protected StompHeaders processConnectHeaders(@Nullable StompHeaders connectHeaders) { connectHeaders = (connectHeaders != null ? connectHeaders : new StompHeaders()); if (connectHeaders.getHeartbeat() == null) { connectHeaders.setHeartbeat(getDefaultHeartbeat()); } return connectHeaders; }
@Test public void heartbeatValues() { this.session.afterConnected(this.connection); assertTrue(this.session.isConnected()); this.connectHeaders.setHeartbeat(new long[] {10000, 10000}); StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.CONNECTED); accessor.setVersion("1.2"); accessor.setHeartbeat(20000, 20000); accessor.setLeaveMutable(true); this.session.handleMessage(MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders())); ArgumentCaptor<Long> writeInterval = ArgumentCaptor.forClass(Long.class); verify(this.connection).onWriteInactivity(any(Runnable.class), writeInterval.capture()); assertEquals(20000, (long) writeInterval.getValue()); ArgumentCaptor<Long> readInterval = ArgumentCaptor.forClass(Long.class); verify(this.connection).onReadInactivity(any(Runnable.class), readInterval.capture()); assertEquals(60000, (long) readInterval.getValue()); }
@Test public void heartbeatNotSupportedByServer() { this.session.afterConnected(this.connection); verify(this.connection).send(any()); this.connectHeaders.setHeartbeat(new long[] {10000, 10000}); StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.CONNECTED); accessor.setVersion("1.2"); accessor.setHeartbeat(0, 0); accessor.setLeaveMutable(true); this.session.handleMessage(MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders())); verifyNoMoreInteractions(this.connection); }
@Test public void heartbeatTasks() { this.session.afterConnected(this.connection); verify(this.connection).send(any()); this.connectHeaders.setHeartbeat(new long[] {10000, 10000}); StompHeaderAccessor connected = StompHeaderAccessor.create(StompCommand.CONNECTED); connected.setVersion("1.2"); connected.setHeartbeat(10000, 10000); connected.setLeaveMutable(true); this.session.handleMessage(MessageBuilder.createMessage(new byte[0], connected.getMessageHeaders())); ArgumentCaptor<Runnable> writeTaskCaptor = ArgumentCaptor.forClass(Runnable.class); ArgumentCaptor<Runnable> readTaskCaptor = ArgumentCaptor.forClass(Runnable.class); verify(this.connection).onWriteInactivity(writeTaskCaptor.capture(), any(Long.class)); verify(this.connection).onReadInactivity(readTaskCaptor.capture(), any(Long.class)); Runnable writeTask = writeTaskCaptor.getValue(); Runnable readTask = readTaskCaptor.getValue(); assertNotNull(writeTask); assertNotNull(readTask); writeTask.run(); StompHeaderAccessor accessor = StompHeaderAccessor.createForHeartbeat(); Message<byte[]> message = MessageBuilder.createMessage(new byte[] {'\n'}, accessor.getMessageHeaders()); verify(this.connection).send(eq(message)); verifyNoMoreInteractions(this.connection); reset(this.sessionHandler); readTask.run(); verify(this.sessionHandler).handleTransportError(same(this.session), any(IllegalStateException.class)); verifyNoMoreInteractions(this.sessionHandler); }
@Test public void processConnectHeadersWithExplicitHeartbeat() throws Exception { StompHeaders connectHeaders = new StompHeaders(); connectHeaders.setHeartbeat(new long[] {15000, 15000}); connectHeaders = this.stompClient.processConnectHeaders(connectHeaders); assertNotNull(connectHeaders); assertArrayEquals(new long[] {15000, 15000}, connectHeaders.getHeartbeat()); }
@Test public void handleConnectedFrame() { this.session.afterConnected(this.connection); assertTrue(this.session.isConnected()); this.connectHeaders.setHeartbeat(new long[] {10000, 10000}); StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.CONNECTED); accessor.setVersion("1.2"); accessor.setHeartbeat(10000, 10000); accessor.setLeaveMutable(true); this.session.handleMessage(MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders())); StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders()); verify(this.sessionHandler).afterConnected(this.session, stompHeaders); verifyNoMoreInteractions(this.sessionHandler); }
@Test public void afterConnected() { assertFalse(this.session.isConnected()); this.connectHeaders.setHost("my-host"); this.connectHeaders.setHeartbeat(new long[] {11, 12}); this.session.afterConnected(this.connection); assertTrue(this.session.isConnected()); Message<byte[]> message = this.messageCaptor.getValue(); StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); assertEquals(StompCommand.CONNECT, accessor.getCommand()); assertEquals("my-host", accessor.getHost()); assertThat(accessor.getAcceptVersion(), containsInAnyOrder("1.1", "1.2")); assertArrayEquals(new long[] {11, 12}, accessor.getHeartbeat()); }
/** * Further initialize the StompHeaders, for example setting the heart-beat * header if necessary. * @param connectHeaders the headers to modify * @return the modified headers */ protected StompHeaders processConnectHeaders(@Nullable StompHeaders connectHeaders) { connectHeaders = (connectHeaders != null ? connectHeaders : new StompHeaders()); if (connectHeaders.getHeartbeat() == null) { connectHeaders.setHeartbeat(getDefaultHeartbeat()); } return connectHeaders; }
@Bean public StompSessionManager stompSessionManager(WebSocketStompClient stompClient) { WebSocketStompSessionManager webSocketStompSessionManager = new WebSocketStompSessionManager(stompClient, server().getWsBaseUrl() + "/ws"); webSocketStompSessionManager.setAutoReceipt(true); webSocketStompSessionManager.setRecoveryInterval(1000); WebSocketHttpHeaders handshakeHeaders = new WebSocketHttpHeaders(); handshakeHeaders.setOrigin("http://foo.com"); webSocketStompSessionManager.setHandshakeHeaders(handshakeHeaders); StompHeaders stompHeaders = new StompHeaders(); stompHeaders.setHeartbeat(new long[] { 10000, 10000 }); webSocketStompSessionManager.setConnectHeaders(stompHeaders); return webSocketStompSessionManager; }
/** * Further initialize the StompHeaders, for example setting the heart-beat * header if necessary. * @param connectHeaders the headers to modify * @return the modified headers */ protected StompHeaders processConnectHeaders(@Nullable StompHeaders connectHeaders) { connectHeaders = (connectHeaders != null ? connectHeaders : new StompHeaders()); if (connectHeaders.getHeartbeat() == null) { connectHeaders.setHeartbeat(getDefaultHeartbeat()); } return connectHeaders; }
/** * Further initialize the StompHeaders, for example setting the heart-beat * header if necessary. * @param connectHeaders the headers to modify * @return the modified headers */ protected StompHeaders processConnectHeaders(@Nullable StompHeaders connectHeaders) { connectHeaders = (connectHeaders != null ? connectHeaders : new StompHeaders()); if (connectHeaders.getHeartbeat() == null) { connectHeaders.setHeartbeat(getDefaultHeartbeat()); } return connectHeaders; }