View Javadoc
1 /************************************************************ 2 * Copyright * 3 * Portions of this software are Copyright (c) 1993 - 2002, * 4 * Chad Z. Hower (Kudzu) and the Indy Pit Crew * 5 * - http://www.nevrona.com/Indy/ * 6 ************************************************************/ 7 package org.indy; 8 9 import java.io.IOException; 10 import java.io.InterruptedIOException; 11 12 import java.net.ServerSocket; 13 14 import org.indy.io.IOHandler; 15 import org.indy.io.IndyIOException; 16 17 import org.indy.util.IndyUtilities; 18 19 20 /*** 21 * DOCUMENT ME! 22 * 23 * @version $Revision$ 24 * @author $author$ 25 */ 26 public final class ListenerThread extends IndyThread { 27 /*** 28 * 29 */ 30 private final TCPServer server; 31 private final ServerSocket binding; 32 33 /*** 34 * Constructor for the IdListenerThread object 35 * 36 *@param server Description of the Parameter 37 *@param binding Description of the Parameter 38 */ 39 public ListenerThread(TCPServer server, ServerSocket binding) { 40 super(); 41 42 if ((server == null) || (binding == null)) { 43 throw new NullPointerException(IndyUtilities.getResourceString( 44 "RSNullBinding")); 45 } 46 47 this.server = server; 48 this.binding = binding; 49 } 50 51 /*** 52 * Gets the server attribute of the IdListenerThread object 53 * 54 *@return The server value 55 */ 56 public TCPServer getServer() { 57 return server; 58 } 59 60 /*** 61 * Main processing method for the IdListenerThread object 62 */ 63 public void run() { 64 try { 65 while (!isStopped()) { 66 IOHandler ioHandler = null; 67 68 69 //set a low timeout so that interupptions can be caught (allowing the thread to be terminated :) 70 binding.setSoTimeout(1000); 71 72 try { 73 ioHandler = server.getIOHandler().accept(binding, this); 74 } 75 catch (InterruptedIOException ioe) { 76 if (!isStopped()) { 77 continue; 78 } 79 } 80 81 if (ioHandler == null) { 82 stop(); 83 84 return; 85 } 86 else { 87 TCPServerConnection peer = new TCPServerConnection(server, ioHandler); 88 89 PeerThread thread = server.getThreadManager().getThread(); 90 91 thread.setConnection(peer); 92 93 if ((server.getMaxConnections() > 0) && 94 (server.getThreadList().size() > server.getMaxConnections())) { 95 server.getThreadManager().releaseThread(thread); 96 peer.writeRFCReply(server.getMaxConnectionReply()); 97 peer.disconnect(); 98 peer = null; 99 } 100 else { 101 server.getThreadList().add(thread); 102 thread.start(); 103 } 104 } 105 } 106 } 107 catch (Exception e) { 108 e.printStackTrace(); 109 server.doListenException(this, new IndyException(e)); 110 } 111 } 112 113 /*** 114 * Description of the Method 115 */ 116 protected synchronized void afterExecute() throws InterruptedException { 117 super.afterRun(); 118 119 try { 120 binding.close(); 121 } 122 catch (IOException ioe) { 123 ioe.printStackTrace(); 124 server.doListenException(this, new IndyIOException(ioe)); 125 } 126 } 127 }

This page was automatically generated by Maven