You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2007/04/06 14:09:30 UTC
svn commit: r526132 - in /mina/trunk/core/src/main/java/org/apache/mina:
common/support/SessionIdleStatusChecker.java
transport/vmpipe/VmPipeConnector.java
transport/vmpipe/support/VmPipeIdleStatusChecker.java
Author: jvermillard
Date: Fri Apr 6 05:09:29 2007
New Revision: 526132
URL: http://svn.apache.org/viewvc?view=rev&rev=526132
Log:
generalized VmPipeIdleStatusChecker for use it with Serial communication
Added:
mina/trunk/core/src/main/java/org/apache/mina/common/support/SessionIdleStatusChecker.java
Removed:
mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeIdleStatusChecker.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
Added: mina/trunk/core/src/main/java/org/apache/mina/common/support/SessionIdleStatusChecker.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/support/SessionIdleStatusChecker.java?view=auto&rev=526132
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/support/SessionIdleStatusChecker.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/support/SessionIdleStatusChecker.java Fri Apr 6 05:09:29 2007
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.common.support;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.util.IdentityHashSet;
+
+/**
+ * Dectects 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) $
+ */
+public class SessionIdleStatusChecker
+{
+ private static final SessionIdleStatusChecker INSTANCE = new SessionIdleStatusChecker();
+
+ public static SessionIdleStatusChecker getInstance()
+ {
+ return INSTANCE;
+ }
+
+ private final Set<BaseIoSession> sessions = new IdentityHashSet<BaseIoSession>();
+
+ private final Worker worker = new Worker();
+
+ private SessionIdleStatusChecker()
+ {
+ worker.start();
+ }
+
+ public void addSession( BaseIoSession session )
+ {
+ synchronized( sessions )
+ {
+ sessions.add( session );
+ }
+ }
+
+ private class Worker extends Thread
+ {
+ private Worker()
+ {
+ super( "VmPipeIdleStatusChecker" );
+ setDaemon( true );
+ }
+
+ @Override
+ public void run()
+ {
+ for( ;; )
+ {
+ try
+ {
+ Thread.sleep( 1000 );
+ }
+ catch( InterruptedException e )
+ {
+ }
+
+ long currentTime = System.currentTimeMillis();
+
+ synchronized( sessions )
+ {
+ Iterator<BaseIoSession> it = sessions.iterator();
+ while( it.hasNext() )
+ {
+ BaseIoSession session = it.next();
+ if( !session.isConnected() )
+ {
+ it.remove();
+ }
+ else
+ {
+ notifyIdleSession( session, currentTime );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void notifyIdleSession( BaseIoSession session, long currentTime )
+ {
+ notifyIdleSession0(
+ session, currentTime,
+ session.getIdleTimeInMillis( IdleStatus.BOTH_IDLE ),
+ IdleStatus.BOTH_IDLE,
+ Math.max( session.getLastIoTime(), session.getLastIdleTime( IdleStatus.BOTH_IDLE ) ) );
+ notifyIdleSession0(
+ session, currentTime,
+ session.getIdleTimeInMillis( IdleStatus.READER_IDLE ),
+ IdleStatus.READER_IDLE,
+ Math.max( session.getLastReadTime(), session.getLastIdleTime( IdleStatus.READER_IDLE ) ) );
+ notifyIdleSession0(
+ session, currentTime,
+ session.getIdleTimeInMillis( IdleStatus.WRITER_IDLE ),
+ IdleStatus.WRITER_IDLE,
+ Math.max( session.getLastWriteTime(), session.getLastIdleTime( IdleStatus.WRITER_IDLE ) ) );
+ }
+
+ private void notifyIdleSession0( BaseIoSession session, long currentTime,
+ long idleTime, IdleStatus status,
+ long lastIoTime )
+ {
+ if( idleTime > 0 && lastIoTime != 0
+ && ( currentTime - lastIoTime ) >= idleTime )
+ {
+ session.increaseIdleCount( status );
+ session.getFilterChain().fireSessionIdle( session, status );
+ }
+ }
+
+}
\ No newline at end of file
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java?view=diff&rev=526132&r1=526131&r2=526132
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java Fri Apr 6 05:09:29 2007
@@ -35,9 +35,9 @@
import org.apache.mina.common.support.AbstractIoFilterChain;
import org.apache.mina.common.support.BaseIoConnector;
import org.apache.mina.common.support.DefaultConnectFuture;
+import org.apache.mina.common.support.SessionIdleStatusChecker;
import org.apache.mina.transport.vmpipe.support.VmPipe;
import org.apache.mina.transport.vmpipe.support.VmPipeFilterChain;
-import org.apache.mina.transport.vmpipe.support.VmPipeIdleStatusChecker;
import org.apache.mina.transport.vmpipe.support.VmPipeSessionImpl;
/**
@@ -115,7 +115,7 @@
// The following sentences don't throw any exceptions.
localSession.setAttribute( AbstractIoFilterChain.CONNECT_FUTURE, future );
getListeners().fireSessionCreated( localSession );
- VmPipeIdleStatusChecker.getInstance().addSession( localSession );
+ SessionIdleStatusChecker.getInstance().addSession( localSession );
}
catch( Throwable t )
{
@@ -132,7 +132,7 @@
// The following sentences don't throw any exceptions.
entry.getListeners().fireSessionCreated( remoteSession );
- VmPipeIdleStatusChecker.getInstance().addSession( remoteSession );
+ SessionIdleStatusChecker.getInstance().addSession( remoteSession );
}
catch( Throwable t )
{