package org.red5.server; /* * RED5 Open Source Flash Server - http://code.google.com/p/red5/ * * Copyright (c) 2006-2010 by respective authors (see below). All rights reserved. * * This library is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation; either version 2.1 of the License, or (at your option) any later * version. * * This library is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ //import java.util.Iterator; import java.util.List; import java.util.Map; /** * The connection object. * * Each connection has an associated client and scope. Connections may be * persistent, polling, or transient. The aim of this interface is to provide * basic connection methods shared between different types of connections * * Future subclasses: RTMPConnection, RemotingConnection, AJAXConnection, * HttpConnection, etc * * @author The Red5 Project (red5@osflash.org) * @author Luke Hubbard (luke@codegent.com) */ public interface IConnection extends ICoreObject { /** * AMF version types, either AMF0 or AMF3. */ public static enum Encoding { AMF0, AMF3 }; /** * Persistent connection type, eg RTMP. */ public static final String PERSISTENT = "persistent"; /** * Polling connection type, eg RTMPT. */ public static final String POLLING = "polling"; /** * Transient connection type, eg Remoting, HTTP, etc. */ public static final String TRANSIENT = "transient"; /** * Get the connection type. * * @return string containing one of connection types */ public String getType(); // PERSISTENT | POLLING | TRANSIENT /** * Get the object encoding (AMF version) for this connection. * * @return the used encoding. */ public Encoding getEncoding(); /** * Initialize the connection. * @param client Client object associated with connection */ public void initialize(IClient client); /** * Try to connect to the scope. * @return <code>true</code> on success, <code>false</code> otherwise * @param scope Scope object */ public boolean connect(); /** * Try to connect to the scope with a list of connection parameters. * @param params Connections parameters * @return <code>true</code> on success, <code>false</code> otherwise * @param scope Scope object */ public boolean connect( Object[] params); /** * Is the client connected to the scope. Result depends on connection type, * <code>true</code> for persistent and polling connections, <code>false</code> for transient. * * @return <code>true</code> if the connection is persistent or polling, * otherwise <code>false</code> */ public boolean isConnected(); /** * Close this connection. This will disconnect the client from the * associated scope. */ public void close(); /** * Return the parameters that were given in the call to "connect". * * @return Connection parameters passed from client-side (Flex/Flash application) */ public Map<String, Object> getConnectParams(); /** * Get the client object associated with this connection. * * @return Client object */ public IClient getClient(); /** * Get the hostname that the client is connected to. If they are connected * to an IP, the IP address will be returned as a String. * * @return String containing the hostname */ public String getHost(); /** * Get the IP address the client is connected from. * * @return The IP address of the client */ public String getRemoteAddress(); /** * Get the IP addresses the client is connected from. If a client is connected * through RTMPT and uses a proxy to connect, this will contain all hosts the * client used to connect to the server. * * @return The IP addresses of the client */ public List<String> getRemoteAddresses(); /** * Get the port the client is connected from. * * @return The port of the client */ public int getRemotePort(); /** * Get the path for this connection. * This is not updated if you switch scope. * * @return path Connection path */ public String getPath(); /** * Get the session id, this may be <code>null</code>. * * @return Session id */ public String getSessionId(); /** * Total number of bytes read from the connection. * * @return Number of read bytes */ public long getReadBytes(); /** * Total number of bytes written to the connection. * * @return Number of written bytes */ public long getWrittenBytes(); /** * Total number of messages read from the connection. * * @return Number of read messages */ public long getReadMessages(); /** * Total number of messages written to the connection. * * @return Number of written messages */ public long getWrittenMessages(); /** * Total number of messages that have been dropped. * * @return Number of dropped messages */ public long getDroppedMessages(); /** * Total number of messages that are pending to be sent to the connection. * * @return Number of pending messages */ public long getPendingMessages(); /** * Return number of written bytes the client reports to have received. * This is the last value of the BytesRead message received from a client. * * @see org.red5.server.net.rtmp.event.BytesRead * @return number of written bytes received by the client */ public long getClientBytesRead(); /** * Start measuring the roundtrip time for a packet on the connection. */ public void ping(); /** * Return roundtrip time of last ping command. * * @return roundtrip time in milliseconds */ public int getLastPingTime(); /** * Get the scope this is connected to. * * @return The connected scope */ // public IScope getScope(); /** * Get the basic scopes this connection has subscribed. This list will * contain the shared objects and broadcast streams the connection * connected to. * * @return List of basic scopes */ // public Iterator<IBasicScope> getBasicScopes(); }