realtimenetprots/sipfw/SIP/LightWeightTimer/inc/TimerManager.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/LightWeightTimer/inc/TimerManager.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+* Name          : TimerManager.h
+* Part of       : LightWeightTimer
+* This header file is included by the subsystem which is 
+* responsible for creating the CTimerManager instance.
+* Version       : SIP/4.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef TIMERMANAGER_H
+#define TIMERMANAGER_H
+
+// INCLUDES
+#include <e32base.h>
+#include "Lwtimer.h"
+#include "mtimernotifier.h"
+
+// FORWARD DECLARATIONS
+class CTimerStore;
+class CSingleTimer;
+
+// CLASS DECLARATION
+
+/**
+ * CTimerManager is the main class of the Lightweight timer subsystem. It is
+ * intended to be used in a way that there is only one instance of the
+ * CTimerManager class, and the basic timer services are available through the
+ * MTimerManager interface.
+ *
+ * Several logical timers can run simultaneously, but only one RTimer is used.
+ */
+class CTimerManager :
+    public CBase,
+	public MTimerNotifier,
+	public MTimerManager
+	{
+public: // Constructors and destructor
+
+	/**
+	 * Creates an instance of CTimerManager.
+	 *
+	 * @see CTimerManager::NewLC
+	 *	
+	 * @return value The new CTimerManager object. Ownership is transferred.
+	 */
+	static CTimerManager* NewL();
+
+	/**
+	 * Creates an instance of CTimerManager and pushes it to CleanupStack.
+	 *
+	 * @see CTimerManager::NewL
+	 *
+	 * @return value The new CTimerManager object. Ownership is transferred.
+	 */
+	static CTimerManager* NewLC();
+
+    /**
+     * Destructor
+     */
+	~CTimerManager();
+
+public: //From MTimerNotifier
+
+	void TimerExpiredL(TTimerId aTimerId);
+
+	TInt LeaveOccurred();
+
+public: //From MTimerManager	
+
+	TTimerId StartL(MExpirationHandler* aObserver,
+				    TUint aMilliseconds);
+
+	TTimerId StartL(MExpirationHandler* aObserver,
+					TUint aMilliseconds,
+					TAny* aTimerParam);
+
+	TInt Stop(TTimerId aTimerId);
+	
+	TBool IsRunning(TTimerId aTimerId) const;
+	
+	TInt ExpiresAfter( TTimerId aTimerId, TUint& aExpiresAfterInMillisecs) const;
+
+private: // Constructors
+
+	CTimerManager();
+
+	/**
+	 * Second phase constructor.	 
+	 */
+	void ConstructL();
+
+private: // For internal use
+
+	/**
+	 * Generates a new unique TTimerId value.
+	 *	 
+	 * @return value New TimerId value
+	 */
+	TTimerId NewTimerId();
+
+	/**
+	 * Set a timer running with the duration of the shortest timer.
+	 *
+	 * @pre iTimer must not be active	 
+	 */
+	void SetTimerWithShortestValueL();
+
+	/**
+	 * Checks if the recently added new timer is shorter than any of the
+	 * existing timers. If it is, the currently running CSingleTimer is
+	 * canceled and CSingleTimer is started again, now with the duration of
+	 * the new timer.
+	 *
+	 * @param aTimerId TimerId of the new timer
+	 * @param aMilliseconds Duration of the new timer, in milliseconds
+	 */
+	void CheckIsNewTimerShortestL(TTimerId aTimerId, TUint aMilliseconds);
+
+	/**
+	 * Set a dummy timer to simulate a longer timer without the need to use
+	 * RTimer::At.
+	 */
+	void SetInternalTimerL() const;
+
+	/**
+	 * Calculates a TTime value by adding the specified amount of time
+	 * (aMilliseconds) to current time.	 
+	 *
+	 * @param aMilliseconds Amount of milliseconds from current time	 
+	 * @return value TTime
+	 */
+	TTime MillisecToTTime(TUint aMilliseconds) const;
+
+	/**
+	 * Calculates the amount of milliseconds between current time and aTime and
+	 * fills the result into aMilliseconds.
+	 *
+	 * @param aTime time
+	 * @param aMilliseconds Amount of milliseconds from current time	 
+	 * @return value ETrue If successful
+	 *				 EFalse The duration between aTime and current time is too
+	 *						large to fit into TUint.
+	 */
+	TBool TTimeToMillisec(TTime aTime, TUint& aMilliseconds) const;	
+
+private: // Data
+
+	//Contains information of existing timer requests. Owned.
+	CTimerStore* iTimerStore;
+
+	//Timer used by all the timer requests. Owned.
+	CSingleTimer* iTimer;
+
+	//Counter used to produce unique TimerId values
+	TTimerId iTimerIdCounter;
+
+	//ETrue if CTimerManager is calling MExpirationHandler::TimerExpiredL.
+	//Otherwise value is EFalse.
+	//This flag is needed as user of CTimerManager might set a new timer within
+	//MExpirationHandler::TimerExpiredL, and CTimerManager has to recognize such
+	//a situation.
+	TBool iNowExpiring;
+
+private: // For testing purposes
+
+	void __DbgTestInvariant() const;
+	
+
+#ifdef CPPUNIT_TEST	
+	friend class CTimerManager_test;
+	friend class CTimerStore_test;
+	friend class CTimerRequest_test;
+	friend class CSingleTimer_test;
+#endif
+	};
+
+#endif // end of TIMERMANAGER_H
+
+// End of File