1 87 package org.codehaus.loom.demos.helloworld; 88 89 import java.io.IOException ; 90 import java.io.InterruptedIOException ; 91 import java.io.PrintWriter ; 92 import java.net.Socket ; 93 import java.net.SocketException ; 94 import org.apache.avalon.framework.logger.AbstractLogEnabled; 95 import org.apache.avalon.phoenix.BlockContext; 96 import org.codehaus.spice.netserve.connection.RequestHandler; 97 98 106 final class HelloWorldHandler 107 extends AbstractLogEnabled 108 implements RequestHandler 109 { 110 111 private static int c_counter; 112 113 114 private HelloWorldServer m_helloWorldServer; 115 116 117 private BlockContext m_context; 118 119 120 126 HelloWorldHandler( final HelloWorldServer helloWorldServer, 127 final BlockContext context ) 128 { 129 m_helloWorldServer = helloWorldServer; 130 m_context = context; 131 } 132 133 140 public void handleConnection( final Socket socket ) 141 { 142 final String remoteHost = socket.getInetAddress().getHostName(); 143 final String remoteIP = socket.getInetAddress().getHostAddress(); 144 145 try 146 { 147 final PrintWriter out = 148 new PrintWriter ( socket.getOutputStream(), true ); 149 150 out.println( "<html><body>" ); 151 out.println( "<b>" + m_helloWorldServer.getGreeting() + "</b><br>" ); 152 out.println( "Requests so far = " + ++c_counter + "<br>" ); 153 out.println( "You are " + remoteHost + " at " + remoteIP + "<br>" ); 154 out.println( "<p>The application will shutdown after 10 requests." ); 155 out.println( "</body></html>" ); 156 157 socket.close(); 158 } 159 catch( final SocketException se ) 160 { 161 getLogger().debug( "Socket to " + remoteHost 162 + " closed remotely in HelloWorld", se ); 163 } 164 catch( final InterruptedIOException iioe ) 165 { 166 getLogger().debug( 167 "Socket to " + remoteHost + " timeout in HelloWorld", iioe ); 168 } 169 catch( final IOException ioe ) 170 { 171 getLogger().debug( "Exception in HelloWorld handling socket to " 172 + remoteHost, ioe ); 173 } 174 catch( final Exception e ) 175 { 176 getLogger().debug( "Exception in HelloWorld opening socket", e ); 177 } 178 finally 179 { 180 try 181 { 182 socket.close(); 183 } 184 catch( final IOException ioe ) 185 { 186 getLogger().error( "Exception closing socket ", ioe ); 187 } 188 } 189 190 getLogger().info( 191 "Connection from " + remoteHost + " (" + remoteIP + ")" ); 192 193 if( c_counter >= 10 ) 195 { 196 System.out.println( "Testing Auto-Shutdown after 10 requests." ); 197 m_context.requestShutdown(); 198 } 199 } 200 201 204 public void shutdown( long timeout ) 205 { 206 } 207 } 208 | Popular Tags |