public void run ( ) { updateThreadName ( null ) ; LOG . log ( Level . FINE , "NGSession {0} is waiting for first client to connect" , instanceNumber ) ; Socket socket = nextSocket ( ) ; while ( socket != null ) { LOG . log ( Level . FINE , "NGSession {0} accepted new connection" , instanceNumber ) ; try ( NGCommunicator comm = communicatorCreator . get ( socket ) ) { runImpl ( comm , socket ) ; } catch ( Throwable t ) { LOG . log ( Level . WARNING , "Internal error in NGSession " + instanceNumber , t ) ; } LOG . log ( Level . FINEST , "NGSession {0} started cleanup" , instanceNumber ) ; if ( System . in instanceof ThreadLocalInputStream ) { ( ( ThreadLocalInputStream ) System . in ) . init ( null ) ; ( ( ThreadLocalPrintStream ) System . out ) . init ( null ) ; ( ( ThreadLocalPrintStream ) System . err ) . init ( null ) ; } LOG . log ( Level . FINE , "NGSession {0} is closing client socket" , instanceNumber ) ; try { socket . close ( ) ; } catch ( Throwable t ) { LOG . log ( Level . WARNING , "Internal error closing socket" , t ) ; } updateThreadName ( null ) ; sessionPool . give ( this ) ; socket = nextSocket ( ) ; } LOG . log ( Level . FINE , "NGSession {0} stopped" , instanceNumber ) ; }
The main NGSession loop . This gets the next socket to process runs the nail for the socket and loops until shut down .