--- /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