All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.red5.server.Red5 Maven / Gradle / Ivy

The newest version!
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.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;

//import javax.management.openmbean.CompositeData;

/**
 * Utility class for accessing Red5 API objects.
 *
 * This class uses a thread local, and will be setup by the service invoker.
 *  
 * The code below shows various uses. 
 * 
*
 
 * IConnection conn = Red5.getConnectionLocal();
 * Red5 r5 = new Red5(); 
 * IScope scope = r5.getScope();
 * conn = r5.getConnection();
 * r5 = new Red5(conn);
 * IClient client = r5.getClient();
 * 
* * @author The Red5 Project ([email protected]) * @author Luke Hubbard ([email protected]) * @author Paul Gregoire ([email protected]) */ public final class Red5 { /** * Current connection thread. Each connection of Red5 application runs in a * separate thread. This is thread object associated with the current connection. */ private static ThreadLocal> connThreadLocal = new ThreadLocal>(); /** * Connection local to the current thread */ public IConnection conn; /** * Current server version with revision */ public static final String VERSION = "Red5 Server 1.0.0 RC1 $Rev: 4204 $"; /** * Current server version for fmsVer requests */ public static final String FMS_VERSION = "RED5/1,0,0,0"; /** * Data version for NetStatusEvents */ @SuppressWarnings("serial") public static final Map DATA_VERSION = new HashMap(2) { { put("version", "4,0,0,1121"); put("type", "red5"); } }; /** * Server start time */ private static final long START_TIME = System.currentTimeMillis(); /** * Create a new Red5 object using given connection. * * @param conn Connection object. */ public Red5(IConnection conn) { this.conn = conn; } /** * Create a new Red5 object using the connection local to the current thread * A bit of magic that lets you access the red5 scope from anywhere */ public Red5() { conn = Red5.getConnectionLocal(); } /** * Setter for connection * * @param connection Thread local connection */ public static void setConnectionLocal(IConnection connection) { if (connection != null) { connThreadLocal.set(new WeakReference(connection)); // IScope scope = connection.getScope(); // if (scope != null) { // Thread.currentThread().setContextClassLoader(scope.getClassLoader()); // } } else { // use null to clear the value connThreadLocal.remove(); } } /** * Get the connection associated with the current thread. This method allows * you to get connection object local to current thread. When you need to * get a connection associated with event handler and so forth, this method * provides you with it. * * @return Connection object */ public static IConnection getConnectionLocal() { WeakReference ref = connThreadLocal.get(); if (ref != null) { return ref.get(); } else { return null; } } /** * Get the connection object. * * @return Connection object */ public IConnection getConnection() { return conn; } /** * Get the scope * * @return Scope object */ // public IScope getScope() { // return conn.getScope(); // } /** * Get the client * * @return Client object */ public IClient getClient() { return conn.getClient(); } /** * Get the spring application context * * @return Application context */ // public IContext getContext() { // return conn.getScope().getContext(); // } /** * Returns the current version with revision number * * @return String version */ public static String getVersion() { return VERSION; } /** * Returns the current version for fmsVer requests * * @return String fms version */ public static String getFMSVersion() { return FMS_VERSION; } public static Object getDataVersion() { return DATA_VERSION; } /** * Returns server uptime in milliseconds. * * @return String version */ public static long getUpTime() { return System.currentTimeMillis() - START_TIME; } /** * Allows for reconstruction via CompositeData. * * @param cd composite data * @return Red5 class instance */ // public static Red5 from(CompositeData cd) { // Red5 instance = null; // if (cd.containsKey("connection")) { // Object cn = cd.get("connection"); // if (cn != null && cn instanceof IConnection) { // instance = new Red5((IConnection) cn); // } else { // instance = new Red5(); // } // } else { // instance = new Red5(); // } // return instance; // } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy