diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/LightWeightTimer/inc/TimerManager.h --- /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 +#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