@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; }
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; }
public static StompFrame newSendFrame(StompMessage message) { StompContentFrame frame = new StompContentFrame( Command.SEND, message.getHeaders() ); frame.setContent( ChannelBuffers.copiedBuffer( message.getContent() ) ); return frame; }
protected void writeContent(StompFrame frame, ChannelBuffer buffer) { if (frame instanceof StompContentFrame) { ChannelBuffer content = ((StompContentFrame) frame).getContent(); buffer.writeBytes( content ); } buffer.writeByte( NULL ); return; }
@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" ) ) ); } }
@Override protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { if (msg instanceof StompMessage) { StompMessage message = (StompMessage) msg; log.debug( "encode: " + message ); FrameHeader header = new FrameHeader( Command.MESSAGE, message.getHeaders() ); StompContentFrame frame = new StompContentFrame( header, message.getContent() ); log.debug( "encode.frame: " + frame ); return frame; } log.debug( "decoded: " + msg ); 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 ); }
public StompFrame decode(ChannelBuffer buffer) throws Exception { FrameHeader header = decodeHeader( buffer ); if (header == null) { return null; } int len = header.getContentLength(); ChannelBuffer content = null; if (len <= 0) { content = readUntilNull( buffer ); } else { content = readUntil( buffer, len ); } StompFrame frame = null; if (content != null) { if (header.isContentFrame()) { frame = new StompContentFrame( header, content ); } else { frame = new StompControlFrame( header ); } } return frame; }
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" ) ) ); }