Class AbstractTrafficShapingHandler
- java.lang.Object
-
- org.jboss.netty.channel.SimpleChannelHandler
-
- org.jboss.netty.handler.traffic.AbstractTrafficShapingHandler
-
- All Implemented Interfaces:
ChannelDownstreamHandler
,ChannelHandler
,ChannelUpstreamHandler
,ExternalResourceReleasable
- Direct Known Subclasses:
ChannelTrafficShapingHandler
,GlobalChannelTrafficShapingHandler
,GlobalTrafficShapingHandler
public abstract class AbstractTrafficShapingHandler extends SimpleChannelHandler implements ExternalResourceReleasable
AbstractTrafficShapingHandler allows to limit the global bandwidth (see
GlobalTrafficShapingHandler
) or per session bandwidth (seeChannelTrafficShapingHandler
), as traffic shaping. It allows too to implement an almost real time monitoring of the bandwidth using the monitors fromTrafficCounter
that will call back every checkInterval the method doAccounting of this handler.An
ObjectSizeEstimator
can be passed at construction to specify what is the size of the object to be read or write accordingly to the type of object. If not specified, it will used theDefaultObjectSizeEstimator
implementation.If you want for any particular reasons to stop the monitoring (accounting) or to change the read/write limit or the check interval, several methods allow that for you:
- configure allows you to change read or write limits, or the checkInterval
- getTrafficCounter allows you to have access to the TrafficCounter and so to stop or start the monitoring, to change the checkInterval directly, or to have access to its values.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
AbstractTrafficShapingHandler.ReadWriteStatus
Attachment of ChannelHandlerContext(package private) class
AbstractTrafficShapingHandler.ReopenReadTimerTask
Class to implement setReadable at fix time.static class
AbstractTrafficShapingHandler.SimpleObjectSizeEstimator
For simple ChannelBuffer, returns the readableBytes, else use standard DefaultObjectSizeEstimator.-
Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static int
CHANNEL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
protected long
checkInterval
Delay between two performance snapshotsstatic long
DEFAULT_CHECK_INTERVAL
Default delay between two checks: 1s(package private) static long
DEFAULT_MAX_SIZE
Default max size to not exceed in buffer (write only).static long
DEFAULT_MAX_TIME
Default max delay in case of traffic shaping (during which no communication will occur).(package private) static int
GLOBAL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
(package private) static int
GLOBALCHANNEL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
(package private) int
index
(package private) static InternalLogger
logger
Internal loggerprotected long
maxTime
Max delay in wait(package private) long
maxWriteDelay
Max time to delay before proposing to stop writing new objects from next handlers(package private) long
maxWriteSize
Max size in the list before proposing to stop writing new objects from next handlers(package private) static long
MINIMAL_WAIT
Default minimal time to waitprivate ObjectSizeEstimator
objectSizeEstimator
ObjectSizeEstimatorprivate long
readLimit
Limit in B/s to apply to read(package private) java.util.concurrent.atomic.AtomicBoolean
release
Boolean associated with the release of this TrafficShapingHandler.(package private) Timeout
timeout
used in releaseExternalResources() to cancel the timerprotected Timer
timer
Timer associated to any TrafficCounterprotected TrafficCounter
trafficCounter
Traffic Counterprivate long
writeLimit
Limit in B/s to apply to write
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer)
protected
AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long checkInterval)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default max time as delay allowed value of 15000L ms.protected
AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit)
protected
AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval)
Constructor using the specified ObjectSizeEstimator and default max time as delay allowed value of 15000L ms.protected
AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime)
Constructor using the specified ObjectSizeEstimator.protected
AbstractTrafficShapingHandler(Timer timer)
Constructor using defaultObjectSizeEstimator
and using NO LIMIT and default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.protected
AbstractTrafficShapingHandler(Timer timer, long checkInterval)
Constructor using defaultObjectSizeEstimator
and using NO LIMIT and default max time as delay allowed value of 15000L ms.protected
AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit)
Constructor using defaultObjectSizeEstimator
and using default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.protected
AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval)
Constructor using defaultObjectSizeEstimator
and default max time as delay allowed value of 15000L ms.protected
AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime)
Constructor using defaultObjectSizeEstimator
.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected long
calculateSize(java.lang.Object obj)
void
channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
Invoked when aChannel
is open, bound to a local address, and connected to a remote address.(package private) static AbstractTrafficShapingHandler.ReadWriteStatus
checkAttachment(ChannelHandlerContext ctx)
(package private) long
checkWaitReadTime(ChannelHandlerContext ctx, long wait, long now)
Method overridden in GTSH to take into account specific timer for the channel.(package private) void
checkWriteSuspend(ChannelHandlerContext ctx, long delay, long queueSize)
Check the writability according to delay and size for the channel.void
configure(long newCheckInterval)
Change the check interval.void
configure(long newWriteLimit, long newReadLimit)
Change the underlying limitations.void
configure(long newWriteLimit, long newReadLimit, long newCheckInterval)
Change the underlying limitations and check interval.protected void
doAccounting(TrafficCounter counter)
Called each time the accounting is computed from the TrafficCounters.long
getCheckInterval()
long
getMaxTimeWait()
long
getMaxWriteDelay()
long
getMaxWriteSize()
long
getReadLimit()
TrafficCounter
getTrafficCounter()
long
getWriteLimit()
(package private) void
informReadOperation(ChannelHandlerContext ctx, long now)
Method overridden in GTSH to take into account specific timer for the channel.private void
init(ObjectSizeEstimator newObjectSizeEstimator, Timer newTimer, long newWriteLimit, long newReadLimit, long newCheckInterval, long newMaxTime)
protected void
internalSubmitWrite(ChannelHandlerContext ctx, MessageEvent evt)
Deprecated.void
messageReceived(ChannelHandlerContext ctx, MessageEvent evt)
Invoked when a message object (e.g:ChannelBuffer
) was received from a remote peer.void
releaseExternalResources()
Releases the external resources that this object depends on.(package private) void
releaseReadSuspended(ChannelHandlerContext ctx)
Release the Read suspension.(package private) void
releaseWriteSuspended(ChannelHandlerContext ctx)
Explicitly release the Write suspended status.void
setCheckInterval(long newCheckInterval)
void
setMaxTimeWait(long maxTime)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.void
setMaxWriteDelay(long maxWriteDelay)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.void
setMaxWriteSize(long maxWriteSize)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.void
setReadLimit(long readLimit)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.(package private) void
setTrafficCounter(TrafficCounter newTrafficCounter)
(package private) void
setWritable(ChannelHandlerContext ctx, boolean writable)
void
setWriteLimit(long writeLimit)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.protected void
submitWrite(ChannelHandlerContext ctx, MessageEvent evt, long delay)
Deprecated.(package private) abstract void
submitWrite(ChannelHandlerContext ctx, MessageEvent evt, long size, long delay, long now)
java.lang.String
toString()
(package private) int
userDefinedWritabilityIndex()
void
writeRequested(ChannelHandlerContext ctx, MessageEvent evt)
Invoked whenChannel.write(Object)
is called.-
Methods inherited from class org.jboss.netty.channel.SimpleChannelHandler
bindRequested, channelBound, channelClosed, channelDisconnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, closeRequested, connectRequested, disconnectRequested, exceptionCaught, handleDownstream, handleUpstream, setInterestOpsRequested, unbindRequested, writeComplete
-
-
-
-
Field Detail
-
logger
static InternalLogger logger
Internal logger
-
DEFAULT_CHECK_INTERVAL
public static final long DEFAULT_CHECK_INTERVAL
Default delay between two checks: 1s- See Also:
- Constant Field Values
-
DEFAULT_MAX_TIME
public static final long DEFAULT_MAX_TIME
Default max delay in case of traffic shaping (during which no communication will occur). Shall be less than TIMEOUT. Here half of "standard" 30s- See Also:
- Constant Field Values
-
DEFAULT_MAX_SIZE
static final long DEFAULT_MAX_SIZE
Default max size to not exceed in buffer (write only).- See Also:
- Constant Field Values
-
MINIMAL_WAIT
static final long MINIMAL_WAIT
Default minimal time to wait- See Also:
- Constant Field Values
-
CHANNEL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
static final int CHANNEL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
- See Also:
- Constant Field Values
-
GLOBAL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
static final int GLOBAL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
- See Also:
- Constant Field Values
-
GLOBALCHANNEL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
static final int GLOBALCHANNEL_DEFAULT_USER_DEFINED_WRITABILITY_INDEX
- See Also:
- Constant Field Values
-
trafficCounter
protected TrafficCounter trafficCounter
Traffic Counter
-
objectSizeEstimator
private ObjectSizeEstimator objectSizeEstimator
ObjectSizeEstimator
-
timer
protected Timer timer
Timer associated to any TrafficCounter
-
timeout
volatile Timeout timeout
used in releaseExternalResources() to cancel the timer
-
writeLimit
private volatile long writeLimit
Limit in B/s to apply to write
-
readLimit
private volatile long readLimit
Limit in B/s to apply to read
-
checkInterval
protected volatile long checkInterval
Delay between two performance snapshots
-
maxTime
protected volatile long maxTime
Max delay in wait
-
maxWriteDelay
volatile long maxWriteDelay
Max time to delay before proposing to stop writing new objects from next handlers
-
maxWriteSize
volatile long maxWriteSize
Max size in the list before proposing to stop writing new objects from next handlers
-
release
final java.util.concurrent.atomic.AtomicBoolean release
Boolean associated with the release of this TrafficShapingHandler. It will be true only once when the releaseExternalRessources is called to prevent waiting when shutdown.
-
index
final int index
-
-
Constructor Detail
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval)
Constructor using defaultObjectSizeEstimator
and default max time as delay allowed value of 15000L ms.- Parameters:
timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit
- 0 or a limit in bytes/sreadLimit
- 0 or a limit in bytes/scheckInterval
- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval)
Constructor using the specified ObjectSizeEstimator and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator
- theObjectSizeEstimator
that will be used to compute the size of the message.timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit
- 0 or a limit in bytes/sreadLimit
- 0 or a limit in bytes/scheckInterval
- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit)
Constructor using defaultObjectSizeEstimator
and using default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit
- 0 or a limit in bytes/sreadLimit
- 0 or a limit in bytes/s
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit)
Constructor using the specified ObjectSizeEstimator and using default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator
- theObjectSizeEstimator
that will be used to compute the size of the message.timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit
- 0 or a limit in bytes/sreadLimit
- 0 or a limit in bytes/s
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer)
Constructor using defaultObjectSizeEstimator
and using NO LIMIT and default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default Check Interval value of 1000L ms and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator
- theObjectSizeEstimator
that will be used to compute the size of the message.timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer, long checkInterval)
Constructor using defaultObjectSizeEstimator
and using NO LIMIT and default max time as delay allowed value of 15000L ms.- Parameters:
timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).checkInterval
- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long checkInterval)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default max time as delay allowed value of 15000L ms.- Parameters:
objectSizeEstimator
- theObjectSizeEstimator
that will be used to compute the size of the message.timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).checkInterval
- The delay between two computations of performances for channels or 0 if no stats are to be computed.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime)
Constructor using defaultObjectSizeEstimator
.- Parameters:
timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit
- 0 or a limit in bytes/sreadLimit
- 0 or a limit in bytes/scheckInterval
- The delay between two computations of performances for channels or 0 if no stats are to be computed.maxTime
- The max time to wait in case of excess of traffic (to prevent Time Out event). Must be positive.
-
AbstractTrafficShapingHandler
protected AbstractTrafficShapingHandler(ObjectSizeEstimator objectSizeEstimator, Timer timer, long writeLimit, long readLimit, long checkInterval, long maxTime)
Constructor using the specified ObjectSizeEstimator.- Parameters:
objectSizeEstimator
- theObjectSizeEstimator
that will be used to compute the size of the message.timer
- created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024).writeLimit
- 0 or a limit in bytes/sreadLimit
- 0 or a limit in bytes/scheckInterval
- The delay between two computations of performances for channels or 0 if no stats are to be computed.maxTime
- The max time to wait in case of excess of traffic (to prevent Time Out event). Must be positive.
-
-
Method Detail
-
userDefinedWritabilityIndex
int userDefinedWritabilityIndex()
-
init
private void init(ObjectSizeEstimator newObjectSizeEstimator, Timer newTimer, long newWriteLimit, long newReadLimit, long newCheckInterval, long newMaxTime)
-
setTrafficCounter
void setTrafficCounter(TrafficCounter newTrafficCounter)
- Parameters:
newTrafficCounter
- the TrafficCounter to set
-
configure
public void configure(long newWriteLimit, long newReadLimit, long newCheckInterval)
Change the underlying limitations and check interval.Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
newWriteLimit
- The new write limit (in bytes)newReadLimit
- The new read limit (in bytes)newCheckInterval
- The new check interval (in milliseconds)
-
configure
public void configure(long newWriteLimit, long newReadLimit)
Change the underlying limitations.Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
newWriteLimit
- The new write limit (in bytes)newReadLimit
- The new read limit (in bytes)
-
configure
public void configure(long newCheckInterval)
Change the check interval.
-
getWriteLimit
public long getWriteLimit()
- Returns:
- the writeLimit
-
setWriteLimit
public void setWriteLimit(long writeLimit)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
writeLimit
- the writeLimit to set
-
getReadLimit
public long getReadLimit()
- Returns:
- the readLimit
-
setReadLimit
public void setReadLimit(long readLimit)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
readLimit
- the readLimit to set
-
getCheckInterval
public long getCheckInterval()
- Returns:
- the checkInterval
-
setCheckInterval
public void setCheckInterval(long newCheckInterval)
- Parameters:
newCheckInterval
- the checkInterval to set
-
getMaxTimeWait
public long getMaxTimeWait()
- Returns:
- the max delay on wait
-
setMaxTimeWait
public void setMaxTimeWait(long maxTime)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
maxTime
- Max delay in wait, shall be less than TIME OUT in related protocol. Must be positive.
-
getMaxWriteDelay
public long getMaxWriteDelay()
- Returns:
- the maxWriteDelay
-
setMaxWriteDelay
public void setMaxWriteDelay(long maxWriteDelay)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
maxWriteDelay
- the maximum Write Delay in ms in the buffer allowed before write suspended is set. Must be positive.
-
getMaxWriteSize
public long getMaxWriteSize()
- Returns:
- the maxWriteSize default being 4194304L bytes
-
setMaxWriteSize
public void setMaxWriteSize(long maxWriteSize)
Note the change will be taken as best effort, meaning that all already scheduled traffics will not be changed, but only applied to new traffics.
So the expected usage of this method is to be used not too often, accordingly to the traffic shaping configuration.- Parameters:
maxWriteSize
- the maximum Write Size allowed in the buffer per channel before write suspended is set, default being 4194304L bytes
-
doAccounting
protected void doAccounting(TrafficCounter counter)
Called each time the accounting is computed from the TrafficCounters. This method could be used for instance to implement almost real time accounting.- Parameters:
counter
- the TrafficCounter that computes its performance
-
releaseReadSuspended
void releaseReadSuspended(ChannelHandlerContext ctx)
Release the Read suspension.
-
messageReceived
public void messageReceived(ChannelHandlerContext ctx, MessageEvent evt) throws java.lang.Exception
Description copied from class:SimpleChannelHandler
Invoked when a message object (e.g:ChannelBuffer
) was received from a remote peer.- Overrides:
messageReceived
in classSimpleChannelHandler
- Throws:
java.lang.Exception
-
checkWaitReadTime
long checkWaitReadTime(ChannelHandlerContext ctx, long wait, long now)
Method overridden in GTSH to take into account specific timer for the channel.- Parameters:
wait
- the wait delay computed in msnow
- the relative now time in ms- Returns:
- the wait to use according to the context.
-
informReadOperation
void informReadOperation(ChannelHandlerContext ctx, long now)
Method overridden in GTSH to take into account specific timer for the channel.- Parameters:
now
- the relative now time in ms
-
writeRequested
public void writeRequested(ChannelHandlerContext ctx, MessageEvent evt) throws java.lang.Exception
Description copied from class:SimpleChannelHandler
Invoked whenChannel.write(Object)
is called.- Overrides:
writeRequested
in classSimpleChannelHandler
- Throws:
java.lang.Exception
-
internalSubmitWrite
@Deprecated protected void internalSubmitWrite(ChannelHandlerContext ctx, MessageEvent evt) throws java.lang.Exception
Deprecated.- Throws:
java.lang.Exception
-
submitWrite
@Deprecated protected void submitWrite(ChannelHandlerContext ctx, MessageEvent evt, long delay) throws java.lang.Exception
Deprecated.- Throws:
java.lang.Exception
-
submitWrite
abstract void submitWrite(ChannelHandlerContext ctx, MessageEvent evt, long size, long delay, long now) throws java.lang.Exception
- Throws:
java.lang.Exception
-
setWritable
void setWritable(ChannelHandlerContext ctx, boolean writable)
-
checkWriteSuspend
void checkWriteSuspend(ChannelHandlerContext ctx, long delay, long queueSize)
Check the writability according to delay and size for the channel. Set if necessary the write suspended status.- Parameters:
delay
- the computed delaiqueueSize
- the current queueSize
-
releaseWriteSuspended
void releaseWriteSuspended(ChannelHandlerContext ctx)
Explicitly release the Write suspended status.
-
getTrafficCounter
public TrafficCounter getTrafficCounter()
- Returns:
- the current TrafficCounter (if channel is still connected).
-
releaseExternalResources
public void releaseExternalResources()
Description copied from interface:ExternalResourceReleasable
Releases the external resources that this object depends on. You should not call this method if the external resources (e.g. thread pool) are in use by other objects.- Specified by:
releaseExternalResources
in interfaceExternalResourceReleasable
-
checkAttachment
static AbstractTrafficShapingHandler.ReadWriteStatus checkAttachment(ChannelHandlerContext ctx)
-
channelConnected
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
Description copied from class:SimpleChannelHandler
Invoked when aChannel
is open, bound to a local address, and connected to a remote address.- Overrides:
channelConnected
in classSimpleChannelHandler
- Throws:
java.lang.Exception
-
calculateSize
protected long calculateSize(java.lang.Object obj)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-