protected void handleStompFrame(ChannelHandlerContext channelContext, StompFrame frame) { if ( frame.getCommand().equals( this.command ) ) { handleControlFrame( channelContext, frame ); } }
public static StompFrame newDisconnectFrame() { StompFrame frame = new StompControlFrame( Command.DISCONNECT ); frame.setHeader( Header.RECEIPT, "connection-close" ); return frame; }
@Override public void handleControlFrame(ChannelHandlerContext channelContext, StompFrame frame) { String receiptId = frame.getHeader( Header.RECEIPT_ID ); getClientContext().receiptReceived( receiptId ); }
protected void writeHeader(StompFrame frame, ChannelBuffer buffer) { buffer.writeBytes( frame.getCommand().getBytes() ); buffer.writeByte( NEWLINE ); Set<String> headerNames = frame.getHeaderNames(); for (String name : headerNames) { if (name.equalsIgnoreCase( "content-length" )) { continue; } buffer.writeBytes( name.getBytes() ); buffer.writeBytes( HEADER_DELIM ); buffer.writeBytes( frame.getHeader( name ).getBytes() ); buffer.writeByte( NEWLINE ); } if (frame instanceof StompContentFrame) { int length = ((StompContentFrame) frame).getContent().readableBytes(); buffer.writeBytes( Header.CONTENT_LENGTH.getBytes() ); buffer.writeBytes( HEADER_DELIM ); buffer.writeBytes( ("" + length).getBytes() ); buffer.writeByte( NEWLINE ); } buffer.writeByte( NEWLINE ); }
ReceiptFuture sendFrame(StompFrame frame, Callable<Void> receiptHandler) { ReceiptFuture future = null; String receiptId = getNextReceiptId(); frame.setHeader( Header.RECEIPT, receiptId ); future = new ReceiptFuture( receiptHandler ); this.receiptHandlers.put( receiptId, future ); this.channel.write( frame ); return future; }
@Test public void testDecodeNullTerminatedMessage() throws Exception { ChannelBuffer bytes = read( "null-terminated.msg", true ); this.decoder.offer( bytes ); StompFrame frame = this.decoder.poll(); assertNotNull( frame ); assertTrue( frame instanceof StompContentFrame ); assertEquals( Command.SEND, frame.getCommand() ); assertEquals( "This is my message.\n", ((StompContentFrame) frame).getContent().toString( Charset.forName( "UTF-8" ) ) ); }
public void closeRequested(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { this.closeRequest = e; StompFrame closeFrame = StompFrames.newDisconnectFrame(); this.receiptId = closeFrame.getHeader( Header.RECEIPT ); Channels.write( ctx.getChannel(), closeFrame ); }
@Test public void testAckFrame() { StompFrame frame = StompFrames.newAckFrame( new DefaultHeaders() ); frame.setHeader( Header.SUBSCRIPTION, "subscription-42" ); frame.setHeader( Header.MESSAGE_ID, "message-84" ); boolean result = this.encoder.offer( frame ); assertTrue( result ); List<String> lines = getFrameLines(); assertEquals( "ACK", lines.get(0) ); assertContainsLine( "subscription:subscription-42", lines ); assertContainsLine( "message-id:message-84", lines ); }
@Test public void testDecodeIncomplete() throws Exception { ChannelBuffer bytes = read( "incomplete-connect.msg", false ); this.decoder.offer( bytes ); StompFrame frame = this.decoder.poll(); assertNull( frame ); this.decoder.offer( ChannelBuffers.copiedBuffer( new byte[] { '\n', 0x00 } ) ); frame = this.decoder.poll(); assertNotNull( frame ); assertEquals( Command.CONNECT, frame.getCommand() ); }
public static StompFrame newErrorFrame(String message, StompFrame inReplyTo) { StompContentFrame frame = new StompContentFrame( Command.ERROR ); if (inReplyTo != null) { String receiptId = inReplyTo.getHeader( Header.RECEIPT ); if (receiptId != null) { frame.setHeader( Header.RECEIPT_ID, receiptId ); } } byte[] bytes = message.getBytes(); frame.setContent( ChannelBuffers.copiedBuffer( bytes ) ); frame.setHeader( Header.CONTENT_LENGTH, String.valueOf( bytes.length ) ); frame.setHeader( Header.CONTENT_TYPE, "text/plain" ); return frame; }
@Override protected void handleControlFrame(ChannelHandlerContext channelContext, StompFrame frame) { String version = frame.getHeader( Header.VERSION ); if (version != null) { getClientContext().setVersion( Version.forVersionString( version ) ); } Channel channel = channelContext.getChannel(); channelContext.sendUpstream( new UpstreamChannelStateEvent( channel, ChannelState.CONNECTED, channel.getRemoteAddress() ) ); channelContext.getPipeline().replace( this, "stomp-disconnection-negotiator", new StompDisconnectionNegotiator( getClientContext() ) ); getClientContext().setConnectionState( State.CONNECTED ); }