IMPSengine/engsrv/inc/impsalivemanager.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 31 Mar 2010 21:19:27 +0300
branchRCL_3
changeset 11 c303fa51f66d
parent 0 094583676ce7
permissions -rw-r--r--
Revision: 201010 Kit: 201013

/*
* Copyright (c) 2003 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: 
* AO class for alive timer. 
*
*/


#ifndef CImpsAliveManager_H
#define CImpsAliveManager_H


//  INCLUDES
#include <e32base.h>
#include "impsservercommon.h"

// CONSTANTS
const TInt KImpsMaxAliveRetryOnce = 2;   // max retries in one round
const TInt KImpsMaxAliveScheduleErr = 1; // nbr of scheduled rounds may fail
const TInt KUseAfterLimit = 120;         // internal aux contant


// DATA TYPES
enum TImpsAliveState
    {
    EImpsAliveIdle,      // Timer not started
    EImpsAliveActive,    // Timer started
    EImpsAlivePending,   // Waiting response
    };

// FORWARD DECLARATIONS
class MImpsCSPSession;
class CImpsAliveManager;
class CImpsAliveTimer;

// CLASS DECLARATION

class CImpsAliveManager : public CActive
    {
    public:  // Constructors and destructor


        /**
        * Two-phased constructor.
        * @param aServer WV engine server
        */
        static CImpsAliveManager* NewL( MImpsCSPSession& aServer );

        /**
        * Destructor.
        */
        virtual ~CImpsAliveManager();

    public:


        /**
        * Start KeepAlive timer for idle times
        * @param aInterval idle time in seconds
        * @return error code
        */
        void StartTimer( TInt aInterval );

        /**
        * Stop KeepAlive timer for idle times
        */
        void StopTimer(  );

        /**
        * Check transport response and decide what to do.
        * @param aCode error code
        */
        void CheckResp( TInt aCode );

        /**
        * Check transport error and decide what to do.
        * @param aTid failed transaction-id
        */
        void CheckError( const TDesC& aTid );

        /**
        * Send KeepAlive primitive
        * @param aSchedule true if triggered by scheduled timer
        */
        void SendKeepAlive( TBool aSchedule );

    protected:
        // From base class
        void RunL();

        void DoCancel();

    private:

        /**
        * C++ default constructor.
        * @param aServer WV engine server
        */
        CImpsAliveManager( MImpsCSPSession& aServer );

        /**
        * By default Symbian OS constructor is private.
        */
        void ConstructL();

        // By default, prohibit copy constructor
        CImpsAliveManager( const CImpsAliveManager& );
        // Prohibit assigment operator
        CImpsAliveManager& operator= ( const CImpsAliveManager& );

        /**
        * Do the error routines.
        */
        void DoHandleError( );

        /**
        * Close CSP Session
        */
        void DoSessionClose();


    private:    // Data
        TInt                iFailCount;
        TInt                iTimerFail;
        TImpsAliveState     iState;
        MImpsCSPSession&    iServer;
        CImpsAliveTimer*    iTimer;
        TBool               iScheduled;
        TBuf<KImpsMaxTID>   iTid;
        TInt                iSeconds;
    };



// CLASS DECLARATION

/**
* CImpsAliveTimer
* Idle timer to lauch Keep-Alive requests in CSP protocol.
*/
class CImpsAliveTimer: public CActive
    {
    public:

        /**
        * Constructor
        * @param aServer WV engine server
        * @param aPriority active object priority
        */
        CImpsAliveTimer( CImpsAliveManager& aServer, TInt aPriority );

        /**
        * Destructor
        */
        virtual ~CImpsAliveTimer();

        /**
        * Start waiting. If not reset again while wait time
        * then Alive msg will be sent.
        * Use CActive::Cancel() to cancel the request.
        * @param aWaitSeconds wait time in seconds
        */
        void Start( TInt aWaitSeconds );

        /**
        * Stop the timer
        */
        void Stop( );


    protected:
        // From base class
        void RunL();

        void DoCancel();
    private:
        TInt                iSeconds;
        CImpsAliveManager&  iMgr;
        RTimer              iTimer;
        TBool               iReset;
        TBool               iCanceled;
        TInt                iMicroSeconds;

    };


#endif      // ?INCLUDE_H   

// End of File