samplemuxhandler.java
来自「很棒的web服务器源代码」· Java 代码 · 共 203 行
JAVA
203 行
// SampleMuxHandler.java// $Id: SampleMuxHandler.java,v 1.5 2000/08/16 21:38:02 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.www.mux;import java.io.IOException;import java.io.PrintStream;import java.util.Hashtable;public class SampleMuxHandler implements MuxStreamHandler { /** * Debug state. */ private static final boolean debug = false; /** * Well known protocols - The echo protocol identifier. */ public static final int ECHO = 7; /** * Well known protocols - The echo protocol identifier. */ public static final int DISCARD = 9; /** * The sigle instance of that class. */ protected static SampleMuxHandler sample = null; /** * The hashtable of accepted protocols. */ protected Hashtable protocols = null; /** * Log an error. * @param msg The message to log. */ protected void log(String msg) { System.out.println("[" + getClass().getName() + "]: "+msg); } /** * Get an instance of that sample mux stream handler. * @return A MuxStreamHandler conformant instance. */ public static synchronized MuxStreamHandler getStreamHandler() { // Of course, we should go through a factory, etc as usual: if ( sample == null ) sample = new SampleMuxHandler(); return sample; } /** * Are we willing to speak the given protocol on the given session. * @param stream The stream that received the new session. * @param sessid The proposed session identifier. * @param protid The protocol to be spoken on that session. * @return A bolean, <strong>true</strong> if the session is accepted, * <strong>false</strong> otherwise. */ public boolean acceptSession(MuxStream stream, int sessid, int protid) { Object o = protocols.get(new Integer(protid)); // Reject unknown protocols straight: if ( o == null ) { if ( debug ) System.out.println("Rejecting "+protid+" on "+sessid+"."); return false; } else { if ( debug ) System.out.println("Accepting "+protid+" on "+sessid+"."); return true; } } /** * Setup the appropriate protocol handler for that accepted session. * @param session The newly accepted session. */ public void notifySession(MuxSession session) { int protid = session.getProtocolIdentifier(); Integer iprotid = new Integer(protid); Object o = protocols.get(iprotid); // This should not happen (except for some race conditions): if ( o == null ) { log("SampleMuxHandler: unknown protocol "+protid); try { session.shutdown(); } catch (Exception ex) { } } // Find (or instantiate) appropriate protocol handler: MuxProtocolHandler handler = null; if ( o instanceof String ) { String strcls = (String) o; try { Class c = Class.forName(strcls); handler = (MuxProtocolHandler) c.newInstance(); } catch (Exception ex) { log("Instantiating handler for " + protid + " of class \"" + strcls + "\" failed."); ex.printStackTrace(); try { session.shutdown(); } catch (IOException exex) { } } } else if ( o instanceof MuxProtocolHandler ) { handler = (MuxProtocolHandler) o; } else { log("SampleMuxHandler: unknown protocol "+protid); try { session.shutdown(); } catch (Exception ex) { } } // We now have a handler, launch: try { handler.initialize(session); } catch (Exception ex) { log("Launching handler for " + protid + " of class \"" + handler.getClass() + "\" failed."); ex.printStackTrace(); try { session.shutdown(); } catch (IOException exex) { } } } /** * Register a protocol handler for the given protocol identifier. * This method register a class to handle all new connections for the * given protocol identifier: each new connection will result in a new * instance of the given class being created (the easy, but slow way). * @param protid The protocol identifier. * @param handler The name of the class to instantiate in order * to get a suitable handler for that protocol. * @see MuxProtocolHandler */ public void registerHandler(int protid, String strhandler) { protocols.put(new Integer(protid), strhandler); } /** * Register an instantiated protocol handler for the given protocol id. * This other method of registering protocol handler is faster then * the previous one: it allows you to spare the instantiation of a protocol * handler on each new sessions. * <p>The given handler will be invoked for all new sessions willing to * speak the advertized protocol. * @param protid The protocol identifier. * @param handler The instantiated protocol handler. */ public void registerHandler(int protid, MuxProtocolHandler handler) { protocols.put(new Integer(protid), handler); } /** * Unregister any handler for that protocol. * @param protid The identifier of the protocol to unregister. */ public void unregisterHandler(int protid) { protocols.remove(new Integer(protid)); } /** * Register default protocol handlers for that stream handler. * This is the right method to override in order to either prevent * well known protocols from being registered, or add new protocol * handlers. * <p>Default protocols registered by this class are: * <dl> * <dt>echo<dd>The echo protocol. * <dt>discard<dd>The discard protocol. * </dt> */ public void registerDefaultHandlers() { registerHandler(ECHO , "org.w3c.www.mux.handlers.Echo"); registerHandler(DISCARD, "org.w3c.www.mux.handlers.Discard"); } public SampleMuxHandler() { super(); // Initialize instance variables: this.protocols = new Hashtable(); // Register default protocols: registerDefaultHandlers(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?