EMMA Coverage Report (generated Fri Oct 21 16:16:13 KST 2005)
[all classes][org.apache.mina.protocol.vmpipe]

COVERAGE SUMMARY FOR SOURCE FILE [VmPipeIdleStatusChecker.java]

nameclass, %method, %block, %line, %
VmPipeIdleStatusChecker.java0%   (0/3)0%   (0/7)0%   (0/168)0%   (0/38)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class VmPipeIdleStatusChecker0%   (0/1)0%   (0/5)0%   (0/112)0%   (0/19)
<static initializer> 0%   (0/1)0%   (0/5)0%   (0/1)
VmPipeIdleStatusChecker (): void 0%   (0/1)0%   (0/18)0%   (0/5)
addSession (VmPipeSession): void 0%   (0/1)0%   (0/20)0%   (0/4)
notifyIdleSession (VmPipeSession, long): void 0%   (0/1)0%   (0/46)0%   (0/5)
notifyIdleSession0 (VmPipeSession, long, long, IdleStatus, long): void 0%   (0/1)0%   (0/23)0%   (0/4)
     
class VmPipeIdleStatusChecker$10%   (0/1)100% (0/0)100% (0/0)100% (0/0)
     
class VmPipeIdleStatusChecker$Worker0%   (0/1)0%   (0/2)0%   (0/56)0%   (0/19)
VmPipeIdleStatusChecker$Worker (VmPipeIdleStatusChecker): void 0%   (0/1)0%   (0/10)0%   (0/4)
run (): void 0%   (0/1)0%   (0/46)0%   (0/15)

1/*
2 * @(#) $Id: VmPipeIdleStatusChecker.java 327113 2005-10-21 06:59:15Z trustin $
3 */
4package org.apache.mina.protocol.vmpipe;
5 
6import java.util.IdentityHashMap;
7import java.util.Iterator;
8import java.util.Map;
9 
10import org.apache.mina.common.IdleStatus;
11import org.apache.mina.common.SessionConfig;
12 
13/**
14 * Dectects idle sessions and fires <tt>sessionIdle</tt> events to them. 
15 * 
16 * @author The Apache Directory Project (dev@directory.apache.org)
17 * @version $Rev: 327113 $, $Date: 2005-10-21 15:59:15 +0900 $
18 */
19class VmPipeIdleStatusChecker
20{
21    static final VmPipeIdleStatusChecker INSTANCE = new VmPipeIdleStatusChecker();
22 
23    private final Map sessions = new IdentityHashMap(); // will use as a set
24 
25    private final Worker worker = new Worker();
26 
27    private VmPipeIdleStatusChecker()
28    {
29        worker.start();
30    }
31 
32    void addSession( VmPipeSession session )
33    {
34        synchronized( sessions )
35        {
36            sessions.put( session, session );
37        }
38    }
39 
40    private class Worker extends Thread
41    {
42        private Worker()
43        {
44            super( "VmPipeIdleStatusChecker" );
45            setDaemon( true );
46        }
47 
48        public void run()
49        {
50            for( ;; )
51            {
52                try
53                {
54                    Thread.sleep( 1000 );
55                }
56                catch( InterruptedException e )
57                {
58                }
59 
60                long currentTime = System.currentTimeMillis();
61 
62                synchronized( sessions )
63                {
64                    Iterator it = sessions.keySet().iterator();
65                    while( it.hasNext() )
66                    {
67                        VmPipeSession session = ( VmPipeSession ) it.next();
68                        if( !session.isConnected() )
69                        {
70                            it.remove();
71                        }
72                        else
73                        {
74                            notifyIdleSession( session, currentTime );
75                        }
76                    }
77                }
78            }
79        }
80    }
81    
82    private void notifyIdleSession( VmPipeSession session, long currentTime )
83    {
84        SessionConfig config = session.getConfig();
85 
86        notifyIdleSession0(
87                session, currentTime,
88                config.getIdleTimeInMillis( IdleStatus.BOTH_IDLE ),
89                IdleStatus.BOTH_IDLE,
90                Math.max( session.getLastIoTime(), session.getLastIdleTime( IdleStatus.BOTH_IDLE ) ) );
91        notifyIdleSession0(
92                session, currentTime,
93                config.getIdleTimeInMillis( IdleStatus.READER_IDLE ),
94                IdleStatus.READER_IDLE,
95                Math.max( session.getLastReadTime(), session.getLastIdleTime( IdleStatus.READER_IDLE ) ) );
96        notifyIdleSession0(
97                session, currentTime,
98                config.getIdleTimeInMillis( IdleStatus.WRITER_IDLE ),
99                IdleStatus.WRITER_IDLE,
100                Math.max( session.getLastWriteTime(), session.getLastIdleTime( IdleStatus.WRITER_IDLE ) ) );
101    }
102 
103    private void notifyIdleSession0( VmPipeSession session, long currentTime,
104                                    long idleTime, IdleStatus status,
105                                    long lastIoTime )
106    {
107        if( idleTime > 0 && lastIoTime != 0
108            && ( currentTime - lastIoTime ) >= idleTime )
109        {
110            session.increaseIdleCount( status );
111            session.getManagerFilterChain().sessionIdle( session, status );
112        }
113    }
114 
115}

[all classes][org.apache.mina.protocol.vmpipe]
EMMA 2.0.4217 (C) Vladimir Roubtsov