diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCARequestMapper.h --- /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 + +// 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 iRequestArray; + TInt iWaitCount; + + //do own + TBool iBackgroundProcessing; + + RArray iBackgroundObservers; + RPointerArray iBackgroundTasks; + + // for background task + RPointerArray 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::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