pushcachelistener.java
来自「很棒的web服务器源代码」· Java 代码 · 共 146 行
JAVA
146 行
// PushCacheListener.java// $Id: PushCacheListener.java,v 1.2 2001/10/05 08:07:52 ylafon Exp $// (c) COPYRIGHT MIT, INRIA and Keio, 2001.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.www.protocol.http.cache.push;import java.lang.reflect.Method;import java.lang.reflect.InvocationTargetException;import java.net.Socket;import java.net.ServerSocket;import java.util.ArrayList;/** * PushCacheListener * Accepts incoming connections on specified port number and creates * PushCacheHandler objects to handle dialogue with client. * * @author Paul Henshaw, The Fantastic Corporation, Paul.Henshaw@fantastic.com * @version $Revision: 1.2 $ * $Id: PushCacheListener.java,v 1.2 2001/10/05 08:07:52 ylafon Exp $ */public class PushCacheListener extends Thread { private int _port_number; private ServerSocket _socket=null; private boolean _running=false; private ArrayList _list=null; private ShutdownHook _hook=null; private boolean _cleaning=false; public class ShutdownHook extends Thread { public ShutdownHook() { // NULL } public void run() { try { stopRunning(); } catch(Exception e) { e.printStackTrace(); } } } /** * Register a hanlder with the listener. * stopRunning will be called on all registered handlers when * the listener is stopped. */ protected void registerHandler(PushCacheHandler handler) { _list.add(handler); } /** * Reregister a handler from the listener */ protected void deregisterHandler(PushCacheHandler handler) { if(!_cleaning) { _list.remove(handler); } } /** * Close sockets, stop handlers. */ protected void cleanup() { if(_cleaning) { return; } _cleaning=true; try { _running=false; if(_socket!=null) { _socket.close(); } _socket=null; } catch(java.io.IOException e) { // IGNORE } for(int i=0; i<_list.size(); i++) { PushCacheHandler handler=(PushCacheHandler)_list.get(i); handler.stopRunning(); } _list.clear(); _list=null; } /** * Request this thread to exit gracefully */ public void stopRunning() { cleanup(); } /** * Listen for connections, creating a handler for each new connection */ public void run() { _running=true; try { while(_running) { Socket s=_socket.accept(); PushCacheHandler handler=new PushCacheHandler(this,s); handler.start(); } } catch(Exception e) { e.printStackTrace(); } cleanup(); } /** * Construct a PushCacheListener * @param port_number port number on which to listen. */ public PushCacheListener(int port_number) throws java.io.IOException { super(); _port_number=port_number; _list=new ArrayList(); _socket=new ServerSocket(_port_number); // add the shutdown hook, if we can! Class _c = java.lang.Runtime.class; Class _cp[] = { java.lang.Thread.class }; try { Method _m = _c.getMethod("addShutdownHook", _cp); Runtime _r = Runtime.getRuntime(); _hook=new ShutdownHook(); Object[] _param = { _hook }; _m.invoke(_r, _param); } catch (NoSuchMethodException ex) { _hook = null; // not using a recent jdk... } catch (InvocationTargetException ex) { // debug traces? } catch (IllegalAccessException ex) { // debug traces? } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?