net.i2p.router.transport.ntcp
Class EventPumper

java.lang.Object
  extended by net.i2p.router.transport.ntcp.EventPumper
All Implemented Interfaces:
Runnable

 class EventPumper
extends Object
implements Runnable

The main NTCP NIO thread.


Constructor Summary
EventPumper(RouterContext ctx, NTCPTransport transport)
           
 
Method Summary
 long getIdleTimeout()
           
 boolean isAlive()
          Selector can take quite a while to close after calling stopPumping()
 void register(ServerSocketChannel chan)
          Register the acceptor.
 void registerConnect(NTCPConnection con)
          Outbound
static void releaseBuf(ByteBuffer buf)
          Return a read buffer to the pool.
 void run()
          The selector loop.
 void startPumping()
           
 void stopPumping()
           
 void wantsRead(NTCPConnection con)
          This is only called from NTCPConnection.complete() if there is more data, which is rare (never?) so we don't need to check for dups or make _wantsRead a Set.
 void wantsWrite(NTCPConnection con)
          Called by the connection when it has data ready to write (after bw allocation).
 void wantsWrite(NTCPConnection con, byte[] data)
          Called by the connection when it has data ready to write.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

EventPumper

public EventPumper(RouterContext ctx,
                   NTCPTransport transport)
Method Detail

startPumping

public void startPumping()

stopPumping

public void stopPumping()

isAlive

public boolean isAlive()
Selector can take quite a while to close after calling stopPumping()


register

public void register(ServerSocketChannel chan)
Register the acceptor. This is only called from NTCPTransport.bindAddress(), so it isn't clear why this needs a queue.


registerConnect

public void registerConnect(NTCPConnection con)
Outbound


run

public void run()
The selector loop. On high-bandwidth routers, this is the thread with the highest CPU usage, so take care to minimize overhead and unnecessary debugging stuff.

Specified by:
run in interface Runnable

wantsWrite

public void wantsWrite(NTCPConnection con,
                       byte[] data)
Called by the connection when it has data ready to write. If we have bandwidth, calls con.Write() which calls wantsWrite(con). If no bandwidth, calls con.queuedWrite().


wantsWrite

public void wantsWrite(NTCPConnection con)
Called by the connection when it has data ready to write (after bw allocation). Only wakeup if new.


wantsRead

public void wantsRead(NTCPConnection con)
This is only called from NTCPConnection.complete() if there is more data, which is rare (never?) so we don't need to check for dups or make _wantsRead a Set.


releaseBuf

public static void releaseBuf(ByteBuffer buf)
Return a read buffer to the pool. These buffers must be from acquireBuf(), i.e. capacity() == BUF_SIZE. High-frequency path in thread.


getIdleTimeout

public long getIdleTimeout()