⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resourceeventqueue.java

📁 很棒的web服务器源代码
💻 JAVA
字号:
// ResourceEventQueue.java// $Id: ResourceEventQueue.java,v 1.5 2000/10/13 16:37:58 bmahe Exp $  // (c) COPYRIGHT MIT and INRIA, 1997.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.tools.resources.event;import org.w3c.tools.resources.FramedResource;import org.w3c.tools.resources.InvalidResourceException;import org.w3c.tools.resources.Resource;import org.w3c.tools.resources.ResourceReference;public class ResourceEventQueue {    public final static boolean debug = false;    class QueueCell {	ResourceEvent event;	QueueCell     next;	int           id;	QueueCell (ResourceEvent revt) {	    this.event = revt;	    this.next  = null;	    this.id    = revt.getID();	}    }    private QueueCell queue = null;    private QueueCell last  = null;    /**     * Send a ResourceEvent in the queue.     * @param evt The Resource Event to put in the queue.     */    public synchronized void sendEvent(ResourceEvent evt) {	if (debug) 	    System.out.println("[QUEUE] : sendEvent "+evt.getID()); 	// => lock()	QueueCell ncell = new QueueCell(evt);	if (queue == null) {	    queue = ncell;	    last  = ncell;	    notifyAll();	} else {	    if ((ncell.id == Events.RESOURCE_MODIFIED) ||		(ncell.id == Events.FRAME_MODIFIED)) {		if (debug) 		    System.out.println("[QUEUE] : remove old modified event");		QueueCell cell = queue;		while (cell != null) {		    if ((cell.id == ncell.id) && 			(cell.event.getSource() == ncell.event.getSource())) 			{			    if (debug) 				System.out.println("[QUEUE] : Found one!");			    cell.event = ncell.event;			    break;			}		    cell = cell.next;		}		if (cell == null) {		    if (debug) 			System.out.println("[QUEUE] : add new event.");		    last.next = ncell;		    last = ncell;		}	    } else {		last.next = ncell;		last = ncell;	    } 	}     }    /**     * Get the next Event in the queue, wait if there is no event     * available in the queue.     * @return a ResourceEvent instance.     * @exception InterruptedException Is unable to get the next event due to     * some interruption.     */    public synchronized ResourceEvent getNextEvent()	throws InterruptedException     {	while (queue == null)	    wait();	QueueCell next = queue;	queue = queue.next;	if (queue == null)	    last = null;	return next.event;    }    /**     * Remove all the Events comming from the given source object.     * @param source The Object where the events to remove are comming from.     */    public synchronized void removeSourceEvents(Object source) {	QueueCell current = queue;	QueueCell prev    = null;	while (current != null) {	    if (current.event.getSource() == source) {		if (prev == null)		    queue = current.next;		else {		    prev.next = current.next;		    if (prev.next == null)			last = prev;		}	    }	    prev    = current;	    current = current.next;	}    }    public ResourceEventQueue() {	queue = null;	new Dispatcher("ResourceEventQueue Dispatcher", this).start();    }}class Dispatcher extends Thread {    private ResourceEventQueue queue    = null;    private boolean            dispatch = true;    public void stopDispatching() {	dispatch = false;    }    public void run() {	while (dispatch) {	    try {		ResourceEvent event = queue.getNextEvent();		if (queue.debug) 		    System.out.println("[QUEUE] : getNextEvent()");		Object src = event.getSource();		ResourceReference rr = null;		try {		    FramedResource source = null;		    if (src instanceof ResourceReference) {			rr = (ResourceReference)src;			Resource res = rr.lock();			if (res instanceof FramedResource)			    source = (FramedResource) res;			else 			    source = null;		    } else if (src instanceof FramedResource) {			source = (FramedResource) src;		    }			    if (source != null) {			if (queue.debug) 			    System.out.println("[QUEUE] : processEvent "+					       event);			source.processEvent(event);		    }		} catch (InvalidResourceException ex) {		    if (queue.debug) {			System.err.println("Exception occurred "+					   "in EventDispatcher:");			ex.printStackTrace();		    }		} finally {		    if (rr != null)			rr.unlock();		}	    } catch (ThreadDeath death) {		return;	    } catch (Throwable e) {		if (queue.debug) {		    System.err.println("Exception occurred "+				       "during event dispatching:");		    e.printStackTrace();		}	    }	}    }    Dispatcher (String name, ResourceEventQueue queue) {	super(name);	this.queue = queue;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -