/* * RED5 Open Source Flash Server - https://github.com/red5 * * Copyright 2006-2015 by respective authors (see below). All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.red5.net.websocket.model; import java.io.UnsupportedEncodingException; import java.lang.ref.WeakReference; import org.apache.mina.core.buffer.IoBuffer; import org.red5.net.websocket.WebSocketConnection; /** * Represents incoming WebSocket data which has been decoded. * * @author Paul Gregoire (mondain@gmail.com) */ public class WSMessage { // message type private MessageType messageType; // the originating connection for this message private WeakReference<WebSocketConnection> connection; // payload private IoBuffer payload; // the path on which this message originated private String path; // creation time private long timeStamp = System.currentTimeMillis(); /** * Returns the payload data as a UTF8 string. * * @return string * @throws UnsupportedEncodingException */ public String getMessageAsString() throws UnsupportedEncodingException { return new String(payload.array(), "UTF8").trim(); } public MessageType getMessageType() { return messageType; } public void setMessageType(MessageType messageType) { this.messageType = messageType; } public WebSocketConnection getConnection() { return connection.get(); } public void setConnection(WebSocketConnection connection) { this.connection = new WeakReference<WebSocketConnection>(connection); // set the connections path on the message setPath(connection.getPath()); } /** * Returns the payload. * * @return payload */ public IoBuffer getPayload() { return payload.flip(); } public void setPayload(IoBuffer payload) { this.payload = payload; } /** * Adds additional payload data. * * @param additionalPayload */ public void addPayload(IoBuffer additionalPayload) { if (payload == null) { payload = IoBuffer.allocate(additionalPayload.limit()); payload.setAutoExpand(true); } this.payload.put(additionalPayload); } /** * Adds additional payload data. * * @param additionalPayload */ public void addPayload(byte[] additionalPayload) { if (payload == null) { payload = IoBuffer.allocate(additionalPayload.length); payload.setAutoExpand(true); } this.payload.put(additionalPayload); } public boolean isPayloadComplete() { return !payload.hasRemaining(); } public long getTimeStamp() { return timeStamp; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } @Override public String toString() { return "WSMessage [messageType=" + messageType + ", timeStamp=" + timeStamp + ", path=" + path + ", payload=" + payload + "]"; } }