diff -r 000000000000 -r b497e44ab2fc syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldsasyncrequesthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldsasyncrequesthandler.h Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,263 @@ +/* +* Copyright (c) 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: Asynchronous request handlers for DS host server. +* +*/ + + +#ifndef __NSMLDSASYNCREQUESTHANDLER_H__ +#define __NSMLDSASYNCREQUESTHANDLER_H__ + +// INCLUDES +#include +#include +#include + +#include "nsmldshostconstants.h" +#include "nsmldshostitem.h" +#include "nsmldsitemmodificationset.h" + +// FORWARD DECLARATIONS +class CNSmlDSHostSession; +class CSmlDataStore; +struct TNSmlDSDataStoreElement; +struct TNSmlDSDataProviderElement; +class CNSmlAdapterLog; + +// CLASS DECLARATION + +// ------------------------------------------------------------------------------------------------ +// Base class for asynchronous request handlers. +// +// @lib nsmldshostserver.lib +// ------------------------------------------------------------------------------------------------ +class CNSmlDSAsyncRequestHandler : public CActive + { + public: // destructor + + /** + * C++ default destructor. + */ + virtual ~CNSmlDSAsyncRequestHandler(); + + public: // New functions + + /** + * Initializes the object for asynchronous calls. + * @return CSmlDataStore&. The asynchronous service provider for the request. + */ + CSmlDataStore& CallDSAsyncLC(); + + /** + * Pushes item to cleanupstack, item, which sets the request status + * on leave CleanupStack::PopAndDestroy() + */ + void SetRequestStatusOnLeaveLC(); + + /** + * Called when the item pushed in CNSmlDSAsyncCallBackForOpen::SetRequestStatusOnLeaveLC() is + * destroyed from the cleanupstack. Sets the request status. + * @param aP. instance of CNSmlDSAsyncCallBackForOpen. + */ + static void SetRequestStatusOnLeaveCleanup( TAny* aP ); + + public: // Functions from base classes + + /** + * calls CActive::SetActive(). + */ + void SetActive(); + + protected: + + /** + * A C++ constructor of this class. + * @param aPriority. The priority of the active object, + * @param aSession. The session object of the request. + * @param aDSItem. contains the data store, which provides the asynchronous service. + * @param aMessage. The message associated with the request. + */ + CNSmlDSAsyncRequestHandler(TInt aPriority, + CNSmlDSHostSession* aSession, + TNSmlDSDataStoreElement* aDSItem, + const RMessagePtr2& aMessage ); + + /** + * Adds object to Active scheduler. + */ + void AddToSchedulerL(); + + private: //Functions from base class + + TInt RunError(TInt aError); + + public: //Data + + CNSmlDSHostSession* iSession; //session for request. + TNSmlDSDataStoreElement* iDSItem; //data store for request + RMessagePtr2 iMessage; //message for request. + }; + +// ------------------------------------------------------------------------------------------------ +// Asynchronous request handler, that calls callback method, when request finishes. +// +// @lib nsmldshostserver.lib +// ------------------------------------------------------------------------------------------------ +class CNSmlDSAsyncCallBack : public CNSmlDSAsyncRequestHandler + { + public: //DATA TYPES + enum TCallBackOperation + { + EFinished = 0, + ECanceled, + EFree + }; + typedef TInt (CNSmlDSHostSession::*RequestFinishedFunction) + (CNSmlDSAsyncCallBack* aDSAO, CNSmlDSAsyncCallBack::TCallBackOperation aOperation); + public: //Constructors and destructors + + /** + * A C++ constructor of this class. + * @param aSession. The session object of the request. + * @param aDSItem. Contains the data store, which provides the asynchronous service. + * @param aMessage. The message associated with the request. + * @param aReqFinishedFunc.the call back function this object calls, when request completes. + * @param aPtr. Pointer to request specific data. + */ + CNSmlDSAsyncCallBack( CNSmlDSHostSession* aSession, + TNSmlDSDataStoreElement* aDSItem, + const RMessage2& aMessage, + RequestFinishedFunction aReqFinishedFunc = NULL, + TAny* aPtr = NULL ); + /** + * C++ destructor + */ + virtual ~CNSmlDSAsyncCallBack(); + + private: // Functions from base classes + + void DoCancel(); + void RunL(); + + public: + + TAny* iPtr; // request specific data. + + protected: + + RequestFinishedFunction iReqFinishedFunc; + }; + +// ------------------------------------------------------------------------------------------------ +// Asynchronous request handler for CSmlDataStore::Open +// +// @lib nsmldshostserver.lib +// ------------------------------------------------------------------------------------------------ +class CNSmlDSAsyncCallBackForOpen : public CNSmlDSAsyncCallBack + { + public: //Constructor + /** + * A C++ constructor of this class. + * @param aSession. The session object of the request. + * @param aMessage. The message associated with the request. + * @param aReqFinishedFunc. the call back function this object calls, when request completes. + */ + CNSmlDSAsyncCallBackForOpen( CNSmlDSHostSession* aSession, + const RMessage2& aMessage, + RequestFinishedFunction aReqFinishedFunc = NULL ); + + public: //Data + + TNSmlDSDataProviderElement* iDpi; //Data provider for request + HBufC* iServerId; + HBufC* iRemoteDB; + }; + +// ------------------------------------------------------------------------------------------------ +// Asynchronous request handler for fetching all changed items. +// +// @lib nsmldshostserver.lib +// ------------------------------------------------------------------------------------------------ +class CNSmlDSChangedItemsFetcher : public CNSmlDSAsyncRequestHandler + { + public: //DATA TYPES + typedef void ( CNSmlDSHostSession::*RequestFinishedFunction ) + ( CNSmlDSChangedItemsFetcher* aDSAO ); + public:// Constructor and destructor + + /** + * Creates new instance of the CNSmlDSChangedItemsFetcher and pushed it to the cleanup stack. + * @param aSession. The session object of the request. + * @param aDSItem. Contains the data store, which provides the asynchronous service. + * @param aMessage. The message associated with the request. + * @param aReqFinishedFunc. The call back function this object calls, when request completes. + * @return CNSmlDSChangedItemsFetcher*. Newly created instance. + */ + static CNSmlDSChangedItemsFetcher* NewLC( CNSmlDSHostSession* aSession, + TNSmlDSDataStoreElement* aDSItem, + const RMessage2& aMessage, + RequestFinishedFunction aReqFinishedFunc ); + + /** + * C++ destructor + */ + virtual ~CNSmlDSChangedItemsFetcher(); + + public: //New methods + + /** + * Fetches all changed items asynchronously. Calls the call back method when done. + */ + void FetchAllChangedItemsL(); + + /** + * Returns the changes after they are fetched. + * @return RNSmlDbItemModificationSet*. Contains the requested changes. + */ + const RNSmlDbItemModificationSet* ChangedItems() const; + + protected: + + /** + * A C++ constructor of this class. + * @param aSession. The session object of the request. + * @param aDSItem. Contains the data store, which provides the asynchronous service. + * @param aMessage. The message associated with the request. + * @param aReqFinishedFunc. The call back function this object calls, when request completes. + */ + CNSmlDSChangedItemsFetcher( CNSmlDSHostSession* aSession, + TNSmlDSDataStoreElement* aDSItem, + const RMessage2& aMessage, + RequestFinishedFunction aReqFinishedFunc ); + + /** + * Symbian 2nd phase constructor + */ + void ConstructL(); + + private: // Functions from base classes + + virtual void DoCancel(); + virtual void RunL(); + + public: + protected: + RequestFinishedFunction iReqFinishedFunc; + TNSmlDbItemModification::TNSmlDbItemModificationType iNextModsToFetch; + RNSmlDbItemModificationSet* iChangedItems; + }; + +#endif //__NSMLDSASYNCREQUESTHANDLER_H__ + +// End of File