wvuing/wvuieng/EngSrc/CCARequestMapper.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuieng/EngSrc/CCARequestMapper.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002-2005 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:  This is the storage of asynchronous imps requests and
+*                background tasks.
+*
+*/
+
+
+#ifndef CCAREQUESTMAPPER_H
+#define CCAREQUESTMAPPER_H
+
+// INCLUDES
+
+#include "PublicEngineDefinitions.h"
+#include "MCABackgroundInterface.h"
+#include "MCABackgroundCallback.h"
+#include "MCABackGroundTaskObserver.h"
+#include <ImpsDetailed.h>
+
+// FORWARD DECLARATIONS
+class CCARequest;
+class TBackgroundNotifier;
+class CCABackgroundTask;
+
+// CLASS DECLARATION
+
+/**
+*  Maps requests to responses. Used e.g. CreateGroupL.
+*  Handles background tasks.
+*
+*  @lib CAEngine.lib
+*  @since 1.2
+*/
+class CCARequestMapper : public CBase
+            , public MCABackgroundInterface
+            , public MCABackgroundCallback
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CCARequestMapper* NewL();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CCARequestMapper();
+
+    public: // From MCABackgroundInterface
+
+        /**
+        * @see MCABackgroundInterface
+        */
+        TInt RegisterBackgroundTask(
+            MCABackgroundTask* aBackgroundTask,
+            TCABackgroundTasks aTaskID,
+            TInt aSubTasks = 1
+        );
+        /**
+        * @see MCABackgroundInterface
+        */
+        TInt RegisterBackgroundObserver(
+            MCABackgroundObserver* BackgroundObserver,
+            TInt aTaskMask,
+            TInt aEventMask
+        );
+        /**
+        * @see MCABackgroundInterface
+        */
+        TInt BackgroundTaskStatus(
+            TCABackgroundTasks aTaskID
+        );
+
+        /**
+        * @see MCABackgroundInterface
+        */
+        TInt UnRegisterBackgroundObserver(
+            MCABackgroundObserver* aBackgroundObserver
+        );
+
+    private: // From MCABackgroundCallback
+
+        /**
+         * @see MCABackgroundCallback::HandleBackgroundTask
+         */
+        TInt HandleBackgroundTask(
+            MCABackgroundInterface::TCABackgroundTasks aTask );
+
+    public: // New functions
+        /**
+        *
+        * @param aState specifies the new network state.
+        */
+        void HandleNetworkStateChange( TNetworkState aState );
+
+        /**
+        * Creates request object and starts waiting if wanted.
+        * CCARequestMapper owns the instance of created request, so remember to
+        * call RemoveRequest/RemoveRequestAndLeaveIfErrorL when request is no
+        * longer needed!!!
+        * @since 1.2
+        * @param aOpId Operation Id of request made
+        * @param aWait Start asynchronous waiting
+        * @param aDestroyAfterComplete Can the request be destroyed after it
+        * has completed
+        * @param aCallBack Callback function to be executed after request is
+        *                  completed
+        * @return Pointer to request object
+        */
+        CCARequest* CreateRequestL( TInt aOpId,
+                                    TBool aWait = ETrue,
+                                    TBool aDestroyAfterComplete = EFalse,
+                                    TCallBack aCallBack = NULL );
+
+        /**
+        * Finds request according to OpId
+        * @since 1.2
+        * @param aOpId Operation Id of request
+        * @return Pointer to request object
+        */
+        const CCARequest* FindRequest( TInt aOpId );
+
+        /**
+        * Removes request from queue
+        * @since 1.2
+        * @param aRequest Request to be removed
+        */
+        void RemoveRequest( CCARequest* aRequest );
+
+        /**
+        * Removes request from queue, and leaves if request's error code
+        * differs from KErrNone
+        * @since 1.2
+        * @param aRequest Request to be removed
+        */
+        void RemoveRequestAndLeaveIfErrorL( CCARequest* aRequest );
+
+        /**
+        * Handles responses to requests, so remember to call this from your
+        * code if you want request to be processed!!!
+        * @since 1.2
+        * @param aOpId Operation Id of response
+        * @param aErrorCode Response's error-code
+        */
+        void HandleRequest( TInt aOpId, TInt aErrorCode );
+
+        /**
+        * Cancels all pending requests
+        */
+        void CancelAllRequests();
+
+        /**
+        * Number of waiting requests
+        * @return Number of waiting requests
+        */
+        TInt WaitCount();
+
+        /**
+        * Cancels all pending requests
+        */
+        void ReportWaitStart();
+
+        /**
+        * Cancels all pending requests
+        */
+        void ReportWaitStop();
+
+        /**
+        * Register to receive notifications related to
+        * start and completetion of background task
+        * @param MCABackGroundTaskObserver- object
+        */
+        void RegisterBackGroundTaskObserver( MCABackGroundTaskObserver* aObserver );
+
+        /**
+         * UnRegister from receiving notifications related to
+         * start and completetion of backgroundtask
+         */
+        void UnRegisterBackGroundTaskObserver( MCABackGroundTaskObserver* aObserver );
+
+        /**
+         * To know whether Background task has started
+         * @return TBool
+         */
+        TBool IsBackgroundTaskPending();
+
+        /**
+         * Notify about the state
+         * start and completetion of backgroundtask
+         */
+        void NotifyBackgroundTaskObservers( );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CCARequestMapper();
+
+        /**
+         * Finds request for given operation id
+         * @param aOpId is operation id
+         */
+        CCARequest* DoFindRequest( TInt aOpId );
+
+        /**
+         * Notifies background observers
+         * @param aTaskPosition index of the task in iBackgroundTasks
+         * @param aStatus new status to publis to observers
+         * @param aSubTaksNumber numer of the current subtask
+         * @param aLeaveCode leave code if the subtask if is there any,
+         *                   KErrNone otherwise
+         */
+        void NotifyBackgroundObservers(
+            TInt aTaskPosition,
+            TCABackgroundStatus aStatus,
+            TInt aSubTaskNumber,
+            TInt aLeaveCode = 0
+        );
+
+        /**
+        * Registers background task
+        * @param aBackgroundTask pointer of instance
+        * @param aTaskID is id of task
+        * @param aSubTasks is number of subtask, positive
+        * @return KErrNone on success, system wide error code otherwise
+        */
+        TInt RegisterBackgroundTaskL(
+            MCABackgroundTask* aBackgroundTask,
+            TCABackgroundTasks aTaskID,
+            TInt aSubTasks = 1
+        );
+
+
+    private:    // Data
+        RPointerArray<CCARequest> iRequestArray;
+        TInt iWaitCount;
+
+        //do own
+        TBool iBackgroundProcessing;
+
+        RArray<TBackgroundNotifier> iBackgroundObservers;
+        RPointerArray<CCABackgroundTask> iBackgroundTasks;
+
+        // for background task
+        RPointerArray<MCABackGroundTaskObserver> iBackGroundTaskObserver;
+
+    };
+
+/**
+*  Encapsulates information about a background observer
+*  Internal, used by CCARequestMapper
+*
+*  @lib CAEngine.lib
+*  @since 1.2
+*/
+class TBackgroundNotifier
+    {
+    public: // New functions
+
+        /**
+        * Constructor
+        * @param aBackgroundObserver pointer to background observer
+        * @param aObserverTaskMask task mask ( bitmap )
+        * @param aObserverEventMask event mask ( bitmap )
+        */
+        TBackgroundNotifier( MCABackgroundObserver* aBackgroundObserver
+                             , TInt aObserverTaskMask = 0
+                                                        , TInt aObserverEventMask = 0
+                           );
+        /**
+        * Equality relation on TBackgroundNotifier
+        * this is required for RArray<TBackgroundNotifier>::Find()
+        *
+        * @param aA for comapre
+        * @param aB for compare
+        * @retrun ETrue if iObservers are the same, EFalse otherwise
+        */
+
+        static TBool Identity( const TBackgroundNotifier& aA
+                               , const TBackgroundNotifier& aB
+                             );
+
+    public:
+        //does not own
+        MCABackgroundObserver* iObserver;
+        //for binary and operation,
+        // see MCABackgroundInterface::TCABackgroundTasks
+        TInt iTaskMask;
+        //for binary and operation,
+        // see MCABackgroundInterface::TCABackgroundStatus
+        TInt iEventMask;
+    };
+
+#endif      // CCAREQUESTMAPPER_H
+
+// End of File