From: <pga...@vu...> - 2014-08-22 05:13:34
|
Revision: 40673 Author: pgardner Date: 2014-08-22 05:13:24 +0000 (Fri, 22 Aug 2014) Log Message: ----------- start of proper support for disable up/down Modified Paths: -------------- client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/PEPeer.java client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/impl/transport/PEPeerTransportProtocol.java client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/download/DownloadImpl.java client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/messaging/GenericMessageConnectionDirect.java client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignDelegate.java client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerImpl.java client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/utils/UtilitiesImpl.java client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagDownLimit.java client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagUpLimit.java Modified: client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/PEPeer.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/PEPeer.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/PEPeer.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -250,6 +250,16 @@ boolean upload ); public void + setUploadDisabled( + Object key, + boolean disabled ); + + public void + setDownloadDisabled( + Object key, + boolean disabled ); + + public void updateAutoUploadPriority( Object key, boolean inc ); Modified: client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/impl/transport/PEPeerTransportProtocol.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/impl/transport/PEPeerTransportProtocol.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/core3/peer/impl/transport/PEPeerTransportProtocol.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -358,8 +358,10 @@ // allow reconnect if we've sent or recieved at least 1 piece over the current connection private boolean allowReconnect; - + private Set<Object> upload_disabled_set; + private Set<Object> download_disabled_set; + private boolean is_optimistic_unchoke = false; private PeerExchangerItem peer_exchange_item = null; @@ -4269,6 +4271,98 @@ connection.removeRateLimiter( limiter, upload ); } + public void + setUploadDisabled( + Object key, + boolean disabled ) + { + synchronized( this ){ + + if ( upload_disabled_set == null ){ + + if ( disabled ){ + + upload_disabled_set = new HashSet<Object>(); + + upload_disabled_set.add( key ); + + }else{ + + Debug.out( "derp" ); + } + }else{ + + if ( disabled ){ + + if ( !upload_disabled_set.add( key )){ + + Debug.out( "derp" ); + } + + }else{ + + if ( !upload_disabled_set.remove( key )){ + + Debug.out( "derp" ); + } + + if ( upload_disabled_set.size() == 0 ){ + + upload_disabled_set = null; + } + } + } + + System.out.println( "setUploadDisabled " + getIp() + " -> " + (upload_disabled_set==null?0:upload_disabled_set.size())); + } + } + + public void + setDownloadDisabled( + Object key, + boolean disabled ) + { + synchronized( this ){ + + if ( download_disabled_set == null ){ + + if ( disabled ){ + + download_disabled_set = new HashSet<Object>(); + + download_disabled_set.add( key ); + + }else{ + + Debug.out( "derp" ); + } + }else{ + + if ( disabled ){ + + if ( !download_disabled_set.add( key )){ + + Debug.out( "derp" ); + } + + }else{ + + if ( !download_disabled_set.remove( key )){ + + Debug.out( "derp" ); + } + + if ( download_disabled_set.size() == 0 ){ + + download_disabled_set = null; + } + } + } + + System.out.println( "setDownloadDisabled " + getIp() + " -> " + (download_disabled_set==null?0:download_disabled_set.size())); + } + } + public Connection getPluginConnection() { return plugin_connection; } Modified: client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/download/DownloadImpl.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/download/DownloadImpl.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/download/DownloadImpl.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -2051,7 +2051,7 @@ RateLimiter limiter, boolean is_upload ) { - download_manager.addRateLimiter( UtilitiesImpl.wrapLimiter( limiter ), is_upload ); + download_manager.addRateLimiter( UtilitiesImpl.wrapLimiter( limiter, false ), is_upload ); } public void @@ -2059,7 +2059,7 @@ RateLimiter limiter, boolean is_upload ) { - download_manager.removeRateLimiter( UtilitiesImpl.wrapLimiter( limiter ), is_upload ); + download_manager.removeRateLimiter( UtilitiesImpl.wrapLimiter( limiter, false ), is_upload ); } public int getSeedingRank() { Modified: client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/messaging/GenericMessageConnectionDirect.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/messaging/GenericMessageConnectionDirect.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/messaging/GenericMessageConnectionDirect.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -160,7 +160,7 @@ addInboundRateLimiter( RateLimiter _limiter ) { - LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter ); + LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter, false ); synchronized( this ){ @@ -184,7 +184,7 @@ removeInboundRateLimiter( RateLimiter _limiter ) { - LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter ); + LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter, false ); synchronized( this ){ @@ -206,7 +206,7 @@ addOutboundRateLimiter( RateLimiter _limiter ) { - LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter ); + LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter, false ); synchronized( this ){ @@ -230,7 +230,7 @@ removeOutboundRateLimiter( RateLimiter _limiter ) { - LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter ); + LimitedRateGroup limiter = UtilitiesImpl.wrapLimiter( _limiter, false ); synchronized( this ){ Modified: client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignDelegate.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignDelegate.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignDelegate.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -110,7 +110,7 @@ RateLimiter limiter, boolean is_upload ) { - network_connection.addRateLimiter( UtilitiesImpl.wrapLimiter( limiter ), is_upload ); + network_connection.addRateLimiter( UtilitiesImpl.wrapLimiter( limiter, false ), is_upload ); } public void @@ -118,7 +118,7 @@ RateLimiter limiter, boolean is_upload ) { - network_connection.removeRateLimiter( UtilitiesImpl.wrapLimiter( limiter ), is_upload ); + network_connection.removeRateLimiter( UtilitiesImpl.wrapLimiter( limiter, false ), is_upload ); } public RateLimiter[] @@ -1077,6 +1077,21 @@ } public void + setUploadDisabled( + Object key, + boolean disabled ) + { + } + + public void + setDownloadDisabled( + Object key, + boolean disabled ) + { + System.out.println( "PeerForeignDelegate:setDownloadDisabled not supported" ); + } + + public void setHaveAggregationEnabled( boolean enabled ) { Modified: client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerImpl.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerImpl.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/peers/PeerImpl.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -55,7 +55,42 @@ private HashMap<Object,PEPeerListener> peer_listeners; + private UtilitiesImpl.PluginLimitedRateGroupListener up_rg_listener = + new UtilitiesImpl.PluginLimitedRateGroupListener() + { + public void + disabledChanged( + PluginLimitedRateGroup group, + boolean is_disabled ) + { + if ( closed ){ + + group.removeListener( this ); + } + + delegate.setUploadDisabled( group, is_disabled ); + } + }; + private UtilitiesImpl.PluginLimitedRateGroupListener down_rg_listener = + new UtilitiesImpl.PluginLimitedRateGroupListener() + { + public void + disabledChanged( + PluginLimitedRateGroup group, + boolean is_disabled ) + { + if ( closed ){ + + group.removeListener( this ); + } + + delegate.setDownloadDisabled( group, is_disabled ); + } + }; + + private volatile boolean closed; + /** * don't use me, use PeerManagerImpl.getPeerForPEPeer * @param _delegate @@ -353,7 +388,26 @@ RateLimiter limiter, boolean is_upload ) { - delegate.addRateLimiter( UtilitiesImpl.wrapLimiter( limiter ), is_upload ); + synchronized( this ){ + + if ( closed ){ + + return; + } + + PluginLimitedRateGroup wrapped_limiter = UtilitiesImpl.wrapLimiter( limiter, true ); + + if ( is_upload ){ + + wrapped_limiter.addListener( up_rg_listener ); + + }else{ + + wrapped_limiter.addListener( down_rg_listener ); + } + + delegate.addRateLimiter( wrapped_limiter, is_upload ); + } } public void @@ -361,7 +415,18 @@ RateLimiter limiter, boolean is_upload ) { - delegate.removeRateLimiter( UtilitiesImpl.wrapLimiter( limiter ), is_upload ); + PluginLimitedRateGroup wrapped_limiter = UtilitiesImpl.wrapLimiter( limiter, true ); + + if ( is_upload ){ + + wrapped_limiter.removeListener( up_rg_listener ); + + }else{ + + wrapped_limiter.removeListener( down_rg_listener ); + } + + delegate.removeRateLimiter(wrapped_limiter, is_upload ); } public RateLimiter[] @@ -420,6 +485,31 @@ protected void closed() { + synchronized( this ){ + + closed = true; + + LimitedRateGroup[] limiters = delegate.getRateLimiters( true ); + + for ( LimitedRateGroup l: limiters ){ + + if ( l instanceof PluginLimitedRateGroup ){ + + ((PluginLimitedRateGroup)l).removeListener( up_rg_listener ); + } + } + + limiters = delegate.getRateLimiters( false ); + + for ( LimitedRateGroup l: limiters ){ + + if ( l instanceof PluginLimitedRateGroup ){ + + ((PluginLimitedRateGroup)l).removeListener( down_rg_listener ); + } + } + } + if ( delegate instanceof PeerForeignDelegate ){ ((PeerForeignDelegate)delegate).stop(); Modified: client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/utils/UtilitiesImpl.java =================================================================== --- client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/utils/UtilitiesImpl.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus2/src/org/gudy/azureus2/pluginsimpl/local/utils/UtilitiesImpl.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -200,12 +200,10 @@ private static CopyOnWriteList<LocationProviderListener> lp_listeners = new CopyOnWriteList<LocationProviderListener>(); private static CopyOnWriteList<LocationProvider> location_providers = new CopyOnWriteList<LocationProvider>(); - - - public static PluginLimitedRateGroup wrapLimiter( - final RateLimiter limiter ) + RateLimiter limiter, + boolean disable_disable ) { synchronized( limiter_map ){ @@ -213,9 +211,15 @@ if ( l == null ){ - l = new PluginLimitedRateGroup( limiter ); + l = new PluginLimitedRateGroup( limiter, disable_disable ); limiter_map.put( limiter, l ); + }else{ + + if ( l.isDisableDisable() != disable_disable ){ + + Debug.out( "Inconsistent setting for disable_disable" ); + } } return( l ); @@ -1885,6 +1889,15 @@ throws S; } + public interface + PluginLimitedRateGroupListener + { + public void + disabledChanged( + PluginLimitedRateGroup group, + boolean is_disabled ); + } + public static class PluginLimitedRateGroup implements LimitedRateGroup @@ -1893,12 +1906,22 @@ private ConnectionManagerImpl.PluginRateLimiter plimiter; + private CopyOnWriteList<PluginLimitedRateGroupListener> listeners; + + private final boolean disable_disable; + + private boolean current_disabled = false; + + private PluginLimitedRateGroup( - RateLimiter _limiter ) + RateLimiter _limiter, + boolean _disable_disable ) { limiter = _limiter; + disable_disable = _disable_disable; + if ( limiter instanceof ConnectionManagerImpl.PluginRateLimiter ){ plimiter = (ConnectionManagerImpl.PluginRateLimiter)limiter; @@ -1905,6 +1928,67 @@ } } + public boolean + isDisableDisable() + { + return( disable_disable ); + } + + public void + addListener( + PluginLimitedRateGroupListener listener ) + { + synchronized( this ){ + + if ( listeners == null ){ + + listeners = new CopyOnWriteList<UtilitiesImpl.PluginLimitedRateGroupListener>(); + } + + listeners.add( listener ); + + if ( current_disabled ){ + + try{ + listener.disabledChanged( this, true ); + + }catch( Throwable e ){ + + Debug.out( e ); + } + } + } + + System.out.println( limiter.getName() + ": listeners=" + listeners.size()); + } + + public void + removeListener( + PluginLimitedRateGroupListener listener ) + { + synchronized( this ){ + + if ( listeners != null ){ + + if ( listeners.remove( listener )){ + + if ( current_disabled ){ + + try{ + listener.disabledChanged( this, false ); + + }catch( Throwable e ){ + + Debug.out( e ); + } + } + } + } + } + + System.out.println( limiter.getName() + ": listeners=" + listeners.size()); + } + public String getName() { @@ -1914,7 +1998,40 @@ public int getRateLimitBytesPerSecond() { - return( limiter.getRateLimitBytesPerSecond()); + int value = limiter.getRateLimitBytesPerSecond(); + + if ( disable_disable ){ + + boolean is_disabled = value == -1; + + if ( is_disabled != current_disabled ){ + + synchronized( this ){ + + current_disabled = is_disabled; + + if ( listeners != null ){ + + for ( PluginLimitedRateGroupListener l: listeners ){ + + try{ + l.disabledChanged( this, is_disabled ); + + }catch( Throwable e ){ + + Debug.out( e ); + } + } + } + } + } + + return( is_disabled?0:value ); + + }else{ + + return( value ); + } } public void Modified: client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagDownLimit.java =================================================================== --- client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagDownLimit.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagDownLimit.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -17,6 +17,7 @@ package com.aelitis.azureus.ui.swt.columns.tag; +import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.core3.util.DisplayFormatters; import org.gudy.azureus2.plugins.ui.tables.*; @@ -67,7 +68,7 @@ return; } - cell.setText( sortVal==0?Constants.INFINITY_STRING:DisplayFormatters.formatByteCountToKiBEtcPerSec( sortVal )); + cell.setText( sortVal==-1?MessageText.getString("MyTorrentsView.menu.setSpeed.disabled"):(sortVal==0?Constants.INFINITY_STRING:DisplayFormatters.formatByteCountToKiBEtcPerSec( sortVal ))); } } } Modified: client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagUpLimit.java =================================================================== --- client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagUpLimit.java 2014-08-21 23:08:08 UTC (rev 40672) +++ client/trunk/azureus3/src/com/aelitis/azureus/ui/swt/columns/tag/ColumnTagUpLimit.java 2014-08-22 05:13:24 UTC (rev 40673) @@ -17,6 +17,7 @@ package com.aelitis.azureus.ui.swt.columns.tag; +import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.core3.util.DisplayFormatters; import org.gudy.azureus2.plugins.ui.tables.*; @@ -67,7 +68,7 @@ return; } - cell.setText( sortVal==0?Constants.INFINITY_STRING:DisplayFormatters.formatByteCountToKiBEtcPerSec( sortVal )); + cell.setText( sortVal==-1?MessageText.getString("MyTorrentsView.menu.setSpeed.disabled"):(sortVal==0?Constants.INFINITY_STRING:DisplayFormatters.formatByteCountToKiBEtcPerSec( sortVal ))); } } } |