You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/11/27 05:04:01 UTC
svn commit: r598511 - in
/mina/trunk/core/src/main/java/org/apache/mina/common:
AbstractIoService.java AbstractIoSession.java DefaultIoFilterChain.java
IdleStatusChecker.java
Author: trustin
Date: Mon Nov 26 20:03:57 2007
New Revision: 598511
URL: http://svn.apache.org/viewvc?rev=598511&view=rev
Log:
* Simplified service idleness notification
* Made sure idleCount is reset to 0 when idleTime becomes 0
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java
mina/trunk/core/src/main/java/org/apache/mina/common/IdleStatusChecker.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java?rev=598511&r1=598510&r2=598511&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java Mon Nov 26 20:03:57 2007
@@ -33,6 +33,28 @@
* @version $Rev$, $Date$
*/
public abstract class AbstractIoService implements IoService {
+ private static final IoServiceListener SERVICE_ACTIVATION_LISTENER =
+ new IoServiceListener() {
+ public void serviceActivated(IoService service) {
+ // Update lastIoTime.
+ AbstractIoService s = (AbstractIoService) service;
+ if (s.getLastReadTime() == 0) {
+ s.setLastReadTime(s.getActivationTime());
+ }
+ if (s.getLastWriteTime() == 0) {
+ s.setLastWriteTime(s.getActivationTime());
+ }
+
+ // Start idleness notification.
+ IdleStatusChecker.getInstance().addService(s);
+ }
+
+ public void serviceDeactivated(IoService service) {}
+ public void serviceIdle(IoService service, IdleStatus idleStatus) {}
+ public void sessionCreated(IoSession session) {}
+ public void sessionDestroyed(IoSession session) {}
+ };
+
/**
* Current filter chain builder.
*/
@@ -110,6 +132,7 @@
}
this.listeners = new IoServiceListenerSupport(this);
+ this.listeners.add(SERVICE_ACTIVATION_LISTENER);
this.sessionConfig = sessionConfig;
}
@@ -426,7 +449,7 @@
if (idleTime < 0) {
throw new IllegalArgumentException("Illegal idle time: " + idleTime);
}
-
+
if (status == IdleStatus.BOTH_IDLE) {
idleTimeForBoth = idleTime;
} else if (status == IdleStatus.READER_IDLE) {
@@ -436,6 +459,16 @@
} else {
throw new IllegalArgumentException("Unknown idle status: " + status);
}
+
+ if (idleTime == 0) {
+ if (status == IdleStatus.BOTH_IDLE) {
+ idleCountForBoth = 0;
+ } else if (status == IdleStatus.READER_IDLE) {
+ idleCountForRead = 0;
+ } else if (status == IdleStatus.WRITER_IDLE) {
+ idleCountForWrite = 0;
+ }
+ }
}
public final boolean isIdle(IdleStatus status) {
@@ -633,6 +666,14 @@
}
protected final void finishSessionInitialization(IoSession session, IoFuture future) {
+ // Update lastIoTime if needed.
+ if (getLastReadTime() == 0) {
+ setLastReadTime(getActivationTime());
+ }
+ if (getLastWriteTime() == 0) {
+ setLastWriteTime(getActivationTime());
+ }
+
// Every property but attributeMap should be set now.
// Now initialize the attributeMap. The reason why we initialize
// the attributeMap at last is to make sure all session properties
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java?rev=598511&r1=598510&r2=598511&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java Mon Nov 26 20:03:57 2007
@@ -682,6 +682,20 @@
}
public final int getIdleCount(IdleStatus status) {
+ if (getConfig().getIdleTime(status) == 0) {
+ if (status == IdleStatus.BOTH_IDLE) {
+ idleCountForBoth = 0;
+ }
+
+ if (status == IdleStatus.READER_IDLE) {
+ idleCountForRead = 0;
+ }
+
+ if (status == IdleStatus.WRITER_IDLE) {
+ idleCountForWrite = 0;
+ }
+ }
+
if (status == IdleStatus.BOTH_IDLE) {
return idleCountForBoth;
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java?rev=598511&r1=598510&r2=598511&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java Mon Nov 26 20:03:57 2007
@@ -322,13 +322,6 @@
}
public void fireSessionCreated() {
- IoService service = session.getService();
- if (service instanceof AbstractIoService) {
- AbstractIoService s = (AbstractIoService) service;
- s.setLastReadTime(session.getCreationTime());
- s.setLastWriteTime(session.getCreationTime());
- }
-
Entry head = this.head;
callNextSessionCreated(head, session);
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IdleStatusChecker.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IdleStatusChecker.java?rev=598511&r1=598510&r2=598511&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IdleStatusChecker.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IdleStatusChecker.java Mon Nov 26 20:03:57 2007
@@ -24,7 +24,7 @@
import java.util.Set;
/**
- * Dectects idle sessions and fires <tt>sessionIdle</tt> events to them.
+ * Detects idle sessions and fires <tt>sessionIdle</tt> events to them.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev: 525369 $, $Date: 2007-04-04 05:05:11 +0200 (mer., 04 avr. 2007) $
@@ -37,6 +37,7 @@
}
private final Set<AbstractIoSession> sessions = new HashSet<AbstractIoSession>();
+ private final Set<AbstractIoService> services = new HashSet<AbstractIoService>();
private final Worker worker = new Worker();
@@ -49,6 +50,12 @@
sessions.add(session);
}
}
+
+ public void addService(AbstractIoService service) {
+ synchronized (services) {
+ services.add(service);
+ }
+ }
private class Worker extends Thread {
private Worker() {
@@ -77,6 +84,19 @@
}
}
}
+
+ synchronized (services) {
+ Iterator<AbstractIoService> it = services.iterator();
+ while (it.hasNext()) {
+ AbstractIoService service = it.next();
+ if (!service.isActive()) {
+ it.remove();
+ System.out.println("DROPPED");
+ } else {
+ notifyIdleness(service, currentTime, false);
+ }
+ }
+ }
}
}
}
@@ -92,10 +112,6 @@
while (sessions.hasNext()) {
s = sessions.next();
notifyIdleSession(s, currentTime);
- }
-
- if (s != null) {
- notifyIdleness(s.getService(), currentTime, false);
}
}