protected void writeContent(StompFrame frame, ChannelBuffer buffer) { if (frame instanceof StompContentFrame) { ChannelBuffer content = ((StompContentFrame) frame).getContent(); buffer.writeBytes( content ); } buffer.writeByte( NULL ); return; }
@Override protected Object decode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { if (msg instanceof StompContentFrame) { StompContentFrame frame = (StompContentFrame) msg; boolean isError = false; if (frame.getCommand() == Command.ERROR) { isError = true; } return this.messageFactory.createMessage( frame.getHeaders(), frame.getContent(), isError ); } return msg; }
protected ChannelBuffer newBuffer(StompFrame frame) { if (frame instanceof StompContentFrame) { return ChannelBuffers.dynamicBuffer( HEADER_ESTIMATE + ((StompContentFrame) frame).getContent().capacity() ); } return ChannelBuffers.dynamicBuffer( HEADER_ESTIMATE ); }
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 ); }
@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" ) ) ); }
@Test public void testMessage() throws Exception { StompMessage message = StompMessages.createStompMessage( "/queues/one", "sasquatch!" ); boolean result = this.encoder.offer( message ); assertTrue( result ); StompContentFrame frame = this.encoder.poll(); assertNotNull( frame ); assertEquals( "/queues/one", frame.getHeader( Header.DESTINATION ) ); assertEquals( "sasquatch!", frame.getContent().toString( Charset.forName( "UTF-8" ) ) ); } }