--- /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 <e32base.h>
+#include <nsmldsconstants.h>
+#include <nsmlconstants.h>
+
+#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