[Beepcore-java-commits] CVS: beepcore-java/src/org/beepcore/beep/core Session.java,1.19,1.20 Session
Status: Beta
Brought to you by:
huston
From: Huston F. <hu...@us...> - 2001-11-22 15:25:33
|
Update of /cvsroot/beepcore-java/beepcore-java/src/org/beepcore/beep/core In directory usw-pr-cvs1:/tmp/cvs-serv21908/src/org/beepcore/beep/core Modified Files: Session.java Removed Files: SessionEvent.java SessionEventListener.java Log Message: Rewrote SessionEvent to follow the java event delegation model Index: Session.java =================================================================== RCS file: /cvsroot/beepcore-java/beepcore-java/src/org/beepcore/beep/core/Session.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** Session.java 2001/11/10 21:33:29 1.19 --- Session.java 2001/11/22 15:25:29 1.20 *************** *** 3,6 **** --- 3,7 ---- * * Copyright (c) 2001 Invisible Worlds, Inc. All rights reserved. + * Copyright (c) 2001 Huston Franklin. All rights reserved. * * The contents of this file are subject to the Blocks Public License (the *************** *** 26,29 **** --- 27,31 ---- import java.util.Collections; import java.util.LinkedList; + import java.util.List; import javax.xml.parsers.*; *************** *** 33,36 **** --- 35,42 ---- import org.xml.sax.SAXException; + import org.beepcore.beep.core.event.ChannelEvent; + import org.beepcore.beep.core.event.ChannelListener; + import org.beepcore.beep.core.event.SessionEvent; + import org.beepcore.beep.core.event.SessionListener; import org.beepcore.beep.util.Log; *************** *** 135,138 **** --- 141,146 ---- private static final String TAG_XML_LANG = "xml:lang"; + private static final String DEFAULT_STRING_ENCODING = "UTF-8"; + // Instance Data private int state; *************** *** 140,147 **** private long nextChannelNumber = 0; private Channel zero; - private ChannelZeroListener zeroListener; private Hashtable channels = null; private Hashtable properties = null; ! private Hashtable eventTable = null; private ProfileRegistry profileRegistry = null; private SessionCredential localCredential, peerCredential; --- 148,159 ---- private long nextChannelNumber = 0; private Channel zero; private Hashtable channels = null; private Hashtable properties = null; ! private List sessionListenerList = ! Collections.synchronizedList(new LinkedList()); ! private SessionListener[] sessionListeners = new SessionListener[0]; ! private List channelListenerList = ! Collections.synchronizedList(new LinkedList()); ! private ChannelListener[] channelListeners = new ChannelListener[0]; private ProfileRegistry profileRegistry = null; private SessionCredential localCredential, peerCredential; *************** *** 152,157 **** private DocumentBuilder builder; // generic XML parser - private static final String DEFAULT_STRING_ENCODING = "UTF-8"; - /** * Default Session Constructor. A relationship between peers - a session - --- 164,167 ---- *************** *** 180,184 **** profileRegistry = registry; channels = new Hashtable(DEFAULT_CHANNELS_SIZE); - eventTable = new Hashtable(DEFAULT_CHANNELS_SIZE); properties = new Hashtable(DEFAULT_PROPERTIES_SIZE); tuningProperties = tuning; --- 190,193 ---- *************** *** 209,215 **** zero = new Channel(this, CHANNEL_ZERO, greetingListener); ! zeroListener = new ChannelZeroListener(); - zero.setMessageListener(zeroListener); channels.put(CHANNEL_ZERO, zero); --- 218,223 ---- zero = new Channel(this, CHANNEL_ZERO, greetingListener); ! zero.setMessageListener(new ChannelZeroListener()); channels.put(CHANNEL_ZERO, zero); *************** *** 260,267 **** GreetingListener greetingListener = new GreetingListener(); - zeroListener = new ChannelZeroListener(); zero = new Channel(this, CHANNEL_ZERO, greetingListener); ! ! zero.setMessageListener(zeroListener); channels.put(CHANNEL_ZERO, zero); --- 268,273 ---- GreetingListener greetingListener = new GreetingListener(); zero = new Channel(this, CHANNEL_ZERO, greetingListener); ! zero.setMessageListener(new ChannelZeroListener()); channels.put(CHANNEL_ZERO, zero); *************** *** 275,278 **** --- 281,310 ---- /** + * adds the listener from the list of listeners to be notified + * of future events. + * + * @see removeChannelListener + */ + public void addChannelListener(ChannelListener l) + { + channelListenerList.add(l); + channelListeners = + (ChannelListener[]) channelListenerList.toArray(channelListeners); + } + + /** + * adds the listener from the list of listeners to be notified + * of future events. + * + * @see removeSessionListener + */ + public void addSessionListener(SessionListener l) + { + sessionListenerList.add(l); + sessionListeners = + (SessionListener[]) sessionListenerList.toArray(sessionListeners); + } + + /** * Peer-level call to simply close a session down, no questions * asked. *************** *** 383,412 **** /** ! * Registers a <code>SessionEventListener</code> for various ! * <code>Session</code> events. ! * ! * @param sel A reference to an implementation of a ! * <code>SessionEventListener</code> that will be called back once ! * an event is fired. * ! * @param event The type of event (i.e. ! * <code>SessionEvent.CHANNEL_OPENED_EVENT_CODE</code>) for which the ! * <code>SessionEventListener</code> is registered. ! * ! * @see SessionEvent ! * @see SessionEventListener ! * @see #fireEvent */ ! public void registerForEvent(SessionEventListener sel, int event) { ! Integer i = new Integer(event); ! LinkedList l = (LinkedList) eventTable.get(i); ! ! if (l == null) { ! l = new LinkedList(); ! } ! l.add(sel); ! eventTable.put(i, l); } --- 415,445 ---- /** ! * Removes the listener from the list of listeners to be notified ! * of future events. Note that the listener will be notified of ! * events which have already happened and are in the process of ! * being dispatched. * ! * @see addChannelListener */ ! public void removeChannelListener(ChannelListener l) { ! channelListenerList.remove(l); ! channelListeners = ! (ChannelListener[]) channelListenerList.toArray(channelListeners); ! } ! /** ! * Removes the listener from the list of listeners to be notified ! * of future events. Note that the listener will be notified of ! * events which have already happened and are in the process of ! * being dispatched. ! * ! * @see addSessionListener ! */ ! public void removeSessionListener(SessionListener l) ! { ! sessionListenerList.remove(l); ! sessionListeners = ! (SessionListener[]) sessionListenerList.toArray(sessionListeners); } *************** *** 593,596 **** --- 626,630 ---- } + fireChannelStarted(ch); return ch; } *************** *** 705,738 **** /** - * Publish a session event to registered - * <code>SessionEventListener</code>s. - * - * @param event Event to be passed to <code>SessionEventListener</code>s. - * @param arg Data associated with event. - * - * @see #registerForEvent - * @see SessionEvent - * @see SessionEventListener - */ - protected void fireEvent(int event, Object arg) - { - Integer k = new Integer(event); - LinkedList l = (LinkedList) eventTable.get(k); - - if (l == null) { - return; - } - - // @todo how do those who have registered to receive events call us - // back? - SessionEvent se = new SessionEvent(event, arg); - Iterator i = l.iterator(); - - while (i.hasNext()) { - ((SessionEventListener) i.next()).receiveEvent(se); - } - } - - /** * Returns the channel's available window size. */ --- 739,742 ---- *************** *** 1011,1014 **** --- 1015,1020 ---- channel.getState() + ")"); } + + fireChannelClosed(channel); } *************** *** 1055,1058 **** --- 1061,1124 ---- } + private void fireChannelClosed(Channel c) + { + ChannelListener[] l = this.channelListeners; + if (l.length == 0) + return; + + ChannelEvent e = new ChannelEvent(c); + for (int i=0; i<l.length; ++i) { + l[i].channelClosed(e); + } + } + + private void fireChannelStarted(Channel c) + { + ChannelListener[] l = this.channelListeners; + if (l.length == 0) + return; + + ChannelEvent e = new ChannelEvent(c); + for (int i=0; i<l.length; ++i) { + l[i].channelStarted(e); + } + } + + private void fireGreetingReceived() + { + SessionListener[] l = this.sessionListeners; + if (l.length == 0) + return; + + SessionEvent e = new SessionEvent(this); + for (int i=0; i<l.length; ++i) { + l[i].greetingReceived(e); + } + } + + private void fireSessionClosed() + { + SessionListener[] l = this.sessionListeners; + if (l.length == 0) + return; + + SessionEvent e = new SessionEvent(this); + for (int i=0; i<l.length; ++i) { + l[i].sessionClosed(e); + } + } + + private void fireSessionTerminated() + { + SessionListener[] l = this.sessionListeners; + if (l.length == 0) + return; + + SessionEvent e = new SessionEvent(this); + for (int i=0; i<l.length; ++i) { + l[i].sessionClosed(e); + } + } + /** * This method is called when Channel Zero receives - from our *************** *** 1197,1201 **** } ! fireEvent(SessionEvent.SESSION_CLOSED_EVENT_CODE, this); } --- 1263,1267 ---- } ! fireSessionClosed(); } *************** *** 1305,1313 **** channels.clear(); - zeroListener = null; zero = null; this.changeState(SESSION_STATE_CLOSED); ! fireEvent(SessionEvent.SESSION_TERMINATED_EVENT_CODE, this); } --- 1371,1378 ---- channels.clear(); zero = null; this.changeState(SESSION_STATE_CLOSED); ! fireSessionTerminated(); } *************** *** 1321,1325 **** // parse the stream ! Document doc = null; try { --- 1386,1390 ---- // parse the stream ! Document doc; try { --- SessionEvent.java DELETED --- --- SessionEventListener.java DELETED --- |