metadataengine/server/inc/mdsserversession.h
changeset 0 c53acadfccc6
child 3 b73a2e62868f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/metadataengine/server/inc/mdsserversession.h	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2005-2009 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 Metadata engine server session file*
+*/
+
+
+#ifndef __MDESERVERSESSION_H__
+#define __MDESERVERSESSION_H__
+
+// INCLUDE FILES
+#include <e32base.h>
+
+#include "mdscommoninternal.h"
+#include "mdcserializationbuffer.h"
+
+// FORWARD DECLARATIONS
+class CMdSServer;
+class CMdSFindEngine;
+class CMdCSerializationBuffer;
+
+// CLASS DECLARATION
+/**
+* CServerSession.
+*  An instance of class CServerSession is created for each client.
+*/
+class CMdSServerSession : public CSession2
+    {
+    public: // Constructors and destructors
+
+        /**
+        * NewL.
+        * Two-phased constructor.
+        * @param aClient The Client's thread.
+        * @param aServer The server.
+        * @return Pointer to created CMdEServerSession object.
+        */
+        static CMdSServerSession* NewL( CMdSServer& aServer );
+
+        /**
+        * NewLC.
+        * Two-phased constructor.
+        * @param aClient The Client's thread.
+        * @param aServer The server.
+        * @return Pointer to created CMdEServerSession object.
+        */
+        static CMdSServerSession* NewLC( CMdSServer& aServer );
+
+        /**
+        * ~CMdEServerSession.
+        * Destructor.
+        */
+        virtual ~CMdSServerSession();
+
+		/**
+		* Cache a notification for an entry;
+		* @param aId notification ID
+		* @param aCompleteCode complete code
+		* @param aData serialized notification data, ownership of data changes 
+		*              even if method leaves
+		*/
+		void CacheNotificationL(TInt aId, TUint32 aCompleteCode, CMdCSerializationBuffer* aData);
+		
+		CMdSServer& GetServer() const;
+	
+	private: // Internal helper methods
+		/**
+		* Check that all queries are complete.
+		*/ 
+		void QueriesCompleteL();
+
+    protected: // Methods for own use
+
+        /**
+        * Adds items to database.
+        * @param aMessage Message from client
+        */
+        void AddL( const RMessage2& aMsg );
+
+		/**
+		* Adds relation to database.
+		* @param aMessage message from client
+		*/
+		void AddRelationDefL(const RMessage2 &aMsg);
+
+		/**
+		* Adds event to database.
+		* @param aMessage message from client
+		*/		
+		void AddEventDefL(const RMessage2 &aMsg);
+
+        /**
+        * Removes item from database.
+        * @param aMessage Message from client
+        */
+        void RemoveL( const RMessage2& aMsg );
+
+        /**
+        * Removes item from database.
+        * @param aMessage Message from client
+        */
+        void RemoveByUriL( const RMessage2& aMsg, TBool aRemoveEvents );
+ 
+        /**
+        * Finds item from database.
+        * @param aMessage Message from client
+        */
+        void FindL( const RMessage2& aMsg );
+
+        /**
+        * Finds item from database.
+        * @param aMessage Message from client
+        */
+        void FindAsyncL( const RMessage2& aMsg );
+
+        /**
+        * Finds item from database.
+        * @param aMessage Message from client
+        */
+        void FindContinueAsyncL( const RMessage2& aMsg );
+
+        /**
+        * Finds item from database and completes message.
+        * @param aMessage Message from client
+        */
+        void FindCancel( const RMessage2& aMsg, TInt aError );
+
+        /**
+         * Get object's "base" values from database and completes message.
+         * @param aMessage Message from client
+         */
+        void CheckObjectL( const RMessage2& aMsg );
+        
+        /**
+        * Transfers data from server to client.
+        * @param aMessage Message from client
+        */
+        void GetDataL( const RMessage2& aMsg );
+
+        /**
+        * Cancels the modifying of object and unlocks the object.
+        * @param aMessage Message from client
+        */
+        void CancelObjectL( const RMessage2& aMsg );
+
+        /**
+        * Commits the modified items to database.
+        * @param aMessage Message from client
+        */
+        void UpdateL( const RMessage2& aMsg );
+
+        /**
+        * Registers the client for notifications.
+        * @param aMessage Message from client
+        */
+        void RegisterL( const RMessage2& aMsg );
+
+        /**
+        * Continues registration for an existing client.
+        * @param aMessage Message from client
+        */
+        void ListenL( const RMessage2& aMsg );
+
+        /**
+        * Unregisters a client for notifications.
+        * @param aMessage Message from client
+        */
+        void UnregisterL( const RMessage2& aMsg );
+
+        /**
+        * Executes session shutdown.
+        * @param aMessage Message from client
+        */
+        void ShutdownL( const RMessage2& aMsg );
+
+        /**
+        * Import metadata.
+        * @param aMessage Message from client
+        */
+        void ImportMetadataL( const RMessage2& aMsg );
+
+        /**
+        * Export metadata
+        * @param aMessage Message from client
+        */
+        void ExportMetadataL( const RMessage2& aMsg );
+
+        /**
+        * Import schema
+        */
+        void ImportSchemaL( const RMessage2& aMsg );
+
+        /**
+        * Add memory card media ID
+        * @param aMessage Message from client where first argument is media ID
+        */
+		void AddMemoryCardL(const RMessage2& aMessage);
+        
+        /**
+        * Get the latest memory card's media ID
+        *
+        * @param aMessage Message from client where first argument is returned 
+        *                 Media ID
+		* @leave KErrNotFound Not memory cards exist at all 
+        */
+        void GetMemoryCardL(const RMessage2& aMessage);
+        
+        /**
+         * Check if the memory card's media ID exist in DB
+         * @param aMessage Message from client where first argument is media ID
+         *                 and second is exists boolean value
+         */
+        void CheckMemoryCardL(const RMessage2& aMessage);
+
+        /**
+         * Set media's media ID, drive and present state to DB.
+         * 
+         * @param aMessage Message from client where first argument is media ID
+         *                 and second is drive and third is present state
+         */
+        void SetMediaL(const RMessage2& aMessage);
+
+        /**
+         * Check if the media's with given media ID exist in DB and return 
+         * drive and present state.
+         * 
+         * @param aMessage Message from client where first argument is media 
+         * 				   ID, second is media ID, third is drive and fourth 
+         *                 is exists boolean value
+         */
+        void GetMediaL(const RMessage2& aMessage);
+
+        /**
+         * Get present medias' media IDs and drives.
+         * 
+         * @param aMessage Message from client where first argument is media 
+         * 				   count and second is media infos
+         */
+        void GetPresentMediasL(const RMessage2& aMessage);
+        
+        /**
+         * Sets files object to present state.
+         * @param aMessage Message from client where first argument is media ID 
+         *                 and file count, second argument is URIs, third 
+         *                 argument is TMdSFileInfos and fourth argument is
+         *                 result buffer, which are sent back to client
+         */
+        void SetFilesToPresentL(const RMessage2& aMessage);
+        
+        /**
+        * Sets all file objects which has given media ID to not present state.
+        *
+        * @param aMessage Message from client where first argument is media ID
+        */
+        void SetFilesToNotPresentL(const RMessage2& aMessage);
+        
+        /**
+        * Removes all file objects which has given media ID and are in not 
+        * present.
+        *
+        * @param aMessage Message from client where first argument is media ID
+        */
+        void RemoveFilesNotPresentL(const RMessage2& aMessage);
+        
+        /**
+         * Gets schema version.
+         *
+         * @param aMessage message from client where first argument is major 
+         *                 version number and second is minor version number
+         */
+        void GetSchemaVersionL(const RMessage2& aMessage);
+        
+        /**
+         * Set object to "present" state by GUID.
+         *
+         * @param aMessage message from client where first argument is GUID 
+         *                 high and second is GUID low
+         * 
+		 * @leave KErrNotFound MdE can't find object in "not present" state 
+		 *                     with matching GUID
+         */
+        void SetObjectToPresentByGuidL(const RMessage2& aMessage);
+        
+        /**
+         * Change path of objects, which match to the old path, to the new 
+         * path.
+         * 
+         * @param aMessage message from client where first argument is the old 
+         *                 path and second is the new path
+         */
+        void ChangePathL(const RMessage2& aMessage);
+        
+        /**
+         * Change C-drive media id to MdS_Medias table and update all objects that have the old id.
+         */
+        void ChangeMediaIdL( const RMessage2& aMessage );
+        
+        /**
+         * Set "binary composing to file" pending flag to objects.
+         * 
+         * @param aMessage message from client where first argument is 
+         *                 serialized array of object IDs
+         */
+        void SetPendingL(const RMessage2& aMessage);
+
+        /**
+         * Reset "binary composing to file" pending flag to objects.
+         * 
+         * @param aMessage message from client where first argument is 
+         *                 serialized array of object IDs
+         */
+        void ResetPendingL(const RMessage2& aMessage);        
+        
+        /**
+		 * Get count of objects with "binary composing to file" pending flag
+		 *
+         * @param aMessage message from client where first argument is 
+         *                 serialized object def ID
+         * 
+		 * @return if >= 0, object count is returned, otherwise error code is 
+		 *         returned
+		 */
+		TInt GetPendingCountL(const RMessage2& aMessage);
+		
+		/**
+		 * Get IDs from objects with "binary composing to file" pending flag
+		 *
+         * @param aMessage message from client where first argument is 
+         *                 serialized object def ID and second argument is
+         *                 returned object ID count and third is serialized 
+         *                 array for object IDs
+		 *
+		 * @return if > 0, buffer is not large enough for objects ID from DB,
+		 *         otherwise error code is returned
+		 */
+		TInt GetPendingL(const RMessage2& aMessage);
+        
+    public: // Functions from base classes
+
+        /**
+         * From CSession2, ServiceL.
+         * Service request from client.
+         * @param aMessage Message from client
+         *                 (containing requested operation and any data).
+         */
+        void ServiceL( const RMessage2& aMessage );
+
+        /**
+         * SizeToRemoteL.
+         * Writes size to slave process.
+         * @param aMessage Message from client
+         * @param aRemote, pointer to client's variable.
+         * @param aHierarchy hierarchy that's size is to be transmitted
+         */
+        static void SizeToRemoteL( const RMessage2& aMsg, TInt aMessageSlot, TInt aSize);
+
+    private: // Constructors and destructors
+
+        /**
+        * CMdSServerSession.
+        * C++ default constructor.
+        * @param aClient The Client's thread.
+        * @param aServer The server.
+        */
+        CMdSServerSession( CMdSServer& aServer );
+
+        /**
+        * ConstructL.
+        * 2nd phase constructor.
+        */
+        void ConstructL();
+
+        /**
+        * Internal function to handle service request from client.
+        * @param aMessage Message from client
+        *                 (containing requested operation and any data).
+        */
+        void ServiceFunctionL( const RMessage2& aMessage );        
+        
+        CMdCSerializationBuffer* CombineBuffersL(
+        		CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer );
+
+        CMdCSerializationBuffer* CombineItemBuffersL(
+        		CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer );
+        
+    private: // Data
+
+        /**
+        * iServer, reference to the server.
+        */
+        CMdSServer& iServer;
+        
+       /**
+        * Find engine
+        */
+        RPointerArray<CMdSFindEngine> iFindEngines;
+
+	    class CNotificationCacheItem : public CBase
+	    	{
+	    	public:
+	    		CNotificationCacheItem( TInt aId, TUint32 aCode, 
+	    			CMdCSerializationBuffer* aData ) : 
+		    		iId( aId ), 
+		    		iCode( aCode ),
+		    		iData( aData )
+		    		{
+		    		}
+		    	
+		    	~CNotificationCacheItem()
+			    	{
+			    	delete iData;
+			    	}
+
+	    	public:
+		    	const TInt iId;
+		    	const TUint32 iCode;
+		    	CMdCSerializationBuffer* iData;
+	    	};
+
+       /**
+        * Cache of notification events
+        */        
+    	RPointerArray<CNotificationCacheItem> iNotificationCache;
+    };
+
+#endif // __MDESERVERSESSION_H__