1 /* 2 * Copyright 2012 The Netty Project 3 * 4 * The Netty Project licenses this file to you under the Apache License, 5 * version 2.0 (the "License"); you may not use this file except in compliance 6 * with the License. You may obtain a copy of the License at: 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 package io.netty.handler.codec.http.websocketx; 17 18 import io.netty.buffer.ByteBuf; 19 import io.netty.buffer.Unpooled; 20 import io.netty.util.CharsetUtil; 21 22 /** 23 * Web Socket text frame with assumed UTF-8 encoding 24 */ 25 public class TextWebSocketFrame extends WebSocketFrame { 26 27 /** 28 * Creates a new empty text frame. 29 */ 30 public TextWebSocketFrame() { 31 super(Unpooled.buffer(0)); 32 } 33 34 /** 35 * Creates a new text frame with the specified text string. The final fragment flag is set to true. 36 * 37 * @param text 38 * String to put in the frame 39 */ 40 public TextWebSocketFrame(String text) { 41 super(fromText(text)); 42 } 43 44 /** 45 * Creates a new text frame with the specified binary data. The final fragment flag is set to true. 46 * 47 * @param binaryData 48 * the content of the frame. Must be UTF-8 encoded 49 */ 50 public TextWebSocketFrame(ByteBuf binaryData) { 51 super(binaryData); 52 } 53 54 /** 55 * Creates a new text frame with the specified text string. The final fragment flag is set to true. 56 * 57 * @param finalFragment 58 * flag indicating if this frame is the final fragment 59 * @param rsv 60 * reserved bits used for protocol extensions 61 * @param text 62 * String to put in the frame 63 */ 64 public TextWebSocketFrame(boolean finalFragment, int rsv, String text) { 65 super(finalFragment, rsv, fromText(text)); 66 } 67 68 private static ByteBuf fromText(String text) { 69 if (text == null || text.isEmpty()) { 70 return Unpooled.EMPTY_BUFFER; 71 } else { 72 return Unpooled.copiedBuffer(text, CharsetUtil.UTF_8); 73 } 74 } 75 76 /** 77 * Creates a new text frame with the specified binary data. The final fragment flag is set to true. 78 * 79 * @param finalFragment 80 * flag indicating if this frame is the final fragment 81 * @param rsv 82 * reserved bits used for protocol extensions 83 * @param binaryData 84 * the content of the frame. Must be UTF-8 encoded 85 */ 86 public TextWebSocketFrame(boolean finalFragment, int rsv, ByteBuf binaryData) { 87 super(finalFragment, rsv, binaryData); 88 } 89 90 /** 91 * Returns the text data in this frame 92 */ 93 public String text() { 94 return content().toString(CharsetUtil.UTF_8); 95 } 96 97 @Override 98 public TextWebSocketFrame copy() { 99 return new TextWebSocketFrame(isFinalFragment(), rsv(), content().copy()); 100 } 101 102 @Override 103 public TextWebSocketFrame duplicate() { 104 return new TextWebSocketFrame(isFinalFragment(), rsv(), content().duplicate()); 105 } 106 107 @Override 108 public TextWebSocketFrame retain() { 109 super.retain(); 110 return this; 111 } 112 113 @Override 114 public TextWebSocketFrame retain(int increment) { 115 super.retain(increment); 116 return this; 117 } 118 }