cryptomgmtlibs/securitycommonutils/source/scsserver/shutdowntimer.cpp
changeset 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptomgmtlibs/securitycommonutils/source/scsserver/shutdowntimer.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Implements the timer which stops the server after no sessions have been
+* open for a defined period.
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include <scs/scsserver.h>
+
+
+CShutdownTimer* CShutdownTimer::NewL(TInt aDelayUs)
+/**
+	Factory function allocates a new, initialized instance of CShutdownTimer.
+
+	@param	aDelayUs		Delay in microseconds.
+	@return					New, initialized instance of CShutdownTimer.
+							The newly-created object is owned by the caller.
+ */
+	{
+	CShutdownTimer* self = new(ELeave) CShutdownTimer(aDelayUs);
+	CleanupStack::PushL(self);
+	self->ConstructL();				// CTimer implementation
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CShutdownTimer::CShutdownTimer(TInt aDelayUs)
+/**
+	Record the shutdown period and add this object to the active scheduler.
+
+	@param	aDelayUs		Delay in microseconds.
+ */
+ :	CTimer(CActive::EPriorityStandard),
+	iDelayUs(aDelayUs)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CShutdownTimer::Restart()
+/**
+	Restart this timer.  This timer should not be active when this
+	function is called.
+
+	Once started, the timer can be stopped with the base class' Cancel function.
+ */
+	{
+	if(iImmediateTimeoutNextRestart)
+		{
+		CActiveScheduler::Stop();
+		return;
+		}
+
+	// Start idle timeout
+	After(iDelayUs);
+	}
+
+void CShutdownTimer::ImmediateTimeoutNextRestart()
+/**
+   Timer should immediately expire when Restart is next called.
+ */
+	{
+	iImmediateTimeoutNextRestart = ETrue;
+	}
+
+
+void CShutdownTimer::RunL()
+/**
+	Implement CActive by stopping the active scheduler, which 
+	has the effect of breaking out of the server loop.
+ */
+	{
+	CActiveScheduler::Stop();
+	}
+