[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 ---
|