package org.red5.server.stream;
/*
* RED5 Open Source Flash Server - http://www.osflash.org/red5
*
* Copyright (c) 2006-2009 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.HashMap;
import java.util.Map;
import org.red5.server.api.IBWControllable;
/**
* A dummy bandwidth control service (bandwidth controller) that
* always has token available.
*
* @author The Red5 Project (red5@osflash.org)
* @author Steven Gong (steven.gong@gmail.com)
*/
public class DummyBWControlService implements IBWControlService {
private ITokenBucket dummyBucket = new DummyTokenBukcet();
private Map<IBWControllable, IBWControlContext> contextMap =
new HashMap<IBWControllable, IBWControlContext>();
public ITokenBucket getAudioBucket(IBWControlContext context) {
return dummyBucket;
}
public ITokenBucket getDataBucket(IBWControlContext context) {
return dummyBucket;
}
public ITokenBucket getVideoBucket(IBWControlContext context) {
return dummyBucket;
}
public IBWControlContext registerBWControllable(IBWControllable bc) {
DummyBWContext context = new DummyBWContext(bc);
contextMap.put(bc, context);
return context;
}
public void resetBuckets(IBWControlContext context) {
// do nothing
}
public void unregisterBWControllable(IBWControlContext context) {
contextMap.remove(context.getBWControllable());
}
public void updateBWConfigure(IBWControlContext context) {
// do nothing
}
public IBWControlContext lookupContext(IBWControllable bc) {
return contextMap.get(bc);
}
static class DummyTokenBukcet implements ITokenBucket {
/** {@inheritDoc} */
public boolean acquireToken(long tokenCount, long wait) {
return true;
}
/** {@inheritDoc} */
public long acquireTokenBestEffort(long upperLimitCount) {
return upperLimitCount;
}
/** {@inheritDoc} */
public boolean acquireTokenNonblocking(long tokenCount,
ITokenBucketCallback callback) {
return true;
}
/** {@inheritDoc} */
public long getCapacity() {
return 0;
}
/** {@inheritDoc} */
public double getSpeed() {
return 0;
}
/** {@inheritDoc} */
public void reset() {
}
}
private class DummyBWContext implements IBWControlContext {
private IBWControllable controllable;
public DummyBWContext(IBWControllable controllable) {
this.controllable = controllable;
}
public IBWControllable getBWControllable() {
return controllable;
}
}
}