--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/StorageManager2/ServerSrc/CPEngStorageFolder.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) 2002 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: One Storage folder management
+*
+*/
+
+
+
+#ifndef __CPENGSTORAGEFOLDER_H__
+#define __CPENGSTORAGEFOLDER_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <bamdesca.h>
+#include "MPEngStorageFolder.h"
+#include "TPEngStorageServerBTreeKeys.h"
+#include "TPEngStorageServerMessages.h"
+
+// FORWARD DECLARATIONS
+class CPEngRequestHandler;
+class RPEngMessage;
+class RFs;
+class CPEngSessionSlotState;
+class CPEngSessionSlotEvent;
+
+/**
+ * One Storage folder management
+ * Manages data in one storage folder
+ *
+ * @since 3.0
+ */
+class CPEngStorageFolder : public CObject,
+ public MPEngStorageFolder
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CPEngStorageFolder* NewL( RFs& aFs,
+ const TDesC& aTempFolder,
+ RBuf16& aCommBuff );
+
+ /**
+ * Two-phased constructor.
+ */
+ static CPEngStorageFolder* NewLC( RFs& aFs,
+ const TDesC& aTempFolder,
+ RBuf16& aCommBuff );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPEngStorageFolder();
+
+ public: // Overwritten virtual functions of the CObject
+
+ /**
+ * Close reference to this reference counted object
+ * if state of folder is active, do not delete it
+ *
+ * @since 3.0
+ */
+ void Close ();
+
+ public: // new from MPEngStorageFolder
+
+ /**
+ * Get data entry
+ * @see MPEngStorageFolder
+ */
+ CPEngDataEntry* DataEntryL( const TDesC& aSId );
+
+
+ public: // New functions used by the Server
+
+ /**
+ * Session slot state
+ *
+ * @since 3.0
+ * @return returns session slot state
+ */
+ CPEngSessionSlotState& SessionSlotState();
+
+ /**
+ * Set Session slot state
+ * Ownership of the parameter is transfered
+ *
+ * @since 3.0
+ * @param aState state of session, ownership is transfered
+ */
+ void SetSessionSlotState( CPEngSessionSlotState& aState );
+
+ /**
+ * Set Session Slot base folder
+ * Ownership of the parameter is transfered
+ *
+ * @since 3.0
+ * @param aFolder des buffer with the base folder
+ * ownership is transfered
+ */
+ void SetSessionFolder( HBufC& aFolder );
+
+ /**
+ * Commited folder session state update
+ * It does necessary cleaning of the folder
+ *
+ * @since 3.0
+ */
+ void CommiteStateUpdate();
+
+
+ public: // New Functions of Storage Engine
+
+ /**
+ * Store store entry into the store
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type and buffer of store entry
+ * @param aNotifyActive flag if notification is active
+ * if ETrue, change if notified to listeners
+ * @return data entry which was stored
+ */
+ const CPEngDataEntry* WriteStoreEntryL(
+ const RPEngMessage& aMessage,
+ TBool aNotifyActive,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Read store entry from the store
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type and buffer of store entry
+ */
+ void ReadStoreEntryL( const RPEngMessage& aMessage );
+
+ /**
+ * Get store entry length
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type
+ */
+ void GetStoreEntryLengthL( const RPEngMessage& aMessage );
+
+ /**
+ * Remove store entry from the store
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type
+ */
+ void RemoveStoreEntryL( const RPEngMessage& aMessage );
+
+ /**
+ * Lock store entry in the store
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type
+ */
+ void LockStoreEntryL( const RPEngMessage& aMessage,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Un Lock store entry in the store
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type
+ */
+ const CPEngDataEntry* UnlockStoreEntryL(
+ const RPEngMessage& aMessage,
+ TBool aNotifyActive,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Un Lock store entry in the store
+ *
+ * @since 3.0
+ * @param aMessage message from client, which carries
+ * Store ID, store type
+ */
+ void IsStoreEntryLockedL( const RPEngMessage& aMessage );
+
+ public: // New Functions of Notification Engine
+
+ /**
+ * Start listening of defined Storage IDs
+ *
+ * @since 3.0
+ * @param aMessage message with request details
+ * @param aSessionId Session ID
+ * @param aSubSessionId Sub Session ID
+ */
+ void ListenSIDsChangesL( const RPEngMessage& aMessage,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Update Listen Storage IDs Request handler with new SIDs
+ *
+ * @since 3.0
+ * @param aMessage message with request details
+ * @param aSessionId Session ID
+ * @param aSubSessionId Sub Session ID
+ */
+ void UpdateListenSIDsScoutL( const RPEngMessage& aMessage,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Fetch Changed Storage IDs Indexes
+ *
+ * @since 3.0
+ * @param aMessage message with request details
+ * @param aSessionId Session ID
+ * @param aSubSessionId Sub Session ID
+ */
+ void FetchChangedIdsIndexesL( const RPEngMessage& aMessage,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Reload Asynchronou request with new Message( TRequestStatus)
+ *
+ * @since 3.0
+ * @param aMessage message with request details
+ * @param aSessionId Session ID
+ * @param aSubSessionId Sub Session ID
+ */
+ void ReloadAsyncScoutL( const RPEngMessage& aMessage,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+
+ /**
+ *
+ *
+ * @since 3.0
+ * @param aSessionId Session ID
+ * @param aSubSessionId Sub Session ID
+ */
+ void CancelSubSessionRequests( TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Cancel defined pending asynchronous request
+ *
+ * @since 3.0
+ * @param aSessionId session ID
+ * @param aSubSessionId sub-session ID
+ * @param aRequest request to be canceled
+ */
+ void CancelRequest( const RPEngMessage& aMessage,
+ TUint32 aSessionId,
+ TInt aSubSessionId );
+
+ /**
+ * Notify about change of the Storage ID, except the
+ * session from which request came
+ *
+ * @since 3.0
+ * @param aMessage message with request details
+ * @param aNotifyActive flag if notification is active
+ * if ETrue, change if notified to listeners
+ * @return data entry which was stored
+ */
+ const CPEngDataEntry* NotifyChangedStorageIdL( const RPEngMessage& aMessage,
+ TBool aNotifyActive );
+
+
+ /**
+ * Notify changed SIDs to the listening clients
+ *
+ * @since 3.0
+ * @param aEntries
+ * @param aSessionId
+ */
+ void NotifySIDChanges( const RPointerArray<CPEngDataEntry>& aEntries );
+
+ private: // New Private Functions of the class
+
+ /**
+ * Find Request Handler
+ *
+ * @since 3.0
+ * @param aSessionId Session ID
+ * @param aSubSessionId Sub Session ID
+ * @param aFunction request function
+ * @return pointer to Request Handler it it exists or NULL
+ */
+ CPEngRequestHandler* FindRequestHandler(
+ TUint32 aSessionId,
+ TInt aSubSessionId,
+ TPEngStorageServerMessages aFunction );
+
+ /**
+ * Get Store Entry instance
+ * If request store Entry does not exists, it will be created
+ *
+ * @since 3.0
+ * @param aMessage clients message with Store ID and store type
+ * @param aCreateIfNotPressent flag if store entry shall be
+ * created if it does not exists ( ETrue = Yes )
+ * @return pointer to the Data entry
+ */
+ CPEngDataEntry* GetStoreEntryL( const RPEngMessage& aMessage,
+ TBool aCreateIfNotPressent,
+ TBtreePos& aPos,
+ TBool aTrueSearch = EFalse );
+
+ /**
+ * Load Store entry and add it to the tree
+ * If store entry does not exists in the store, created it
+ * if flag is switched on
+ *
+ * @since 3.0
+ * @param aKey key of the Storage Entry
+ * @param aCreateIfNotPressent flag if store entry shall be
+ * created if it does not exists ( ETrue = Yes )
+ * @return pointer to the Data entry
+ */
+ CPEngDataEntry* LoadStoreEntryL( TDesC& aKey,
+ TBool aCreateIfNotPressent,
+ TBtreePos& aPos,
+ const RPEngMessage& aMessage );
+
+ /**
+ * Notify observer that all observer SIds changed
+ *
+ * @since 3.0
+ */
+ void NofifyAllAboutAll();
+
+ /**
+ * Look in buffered data entries
+ *
+ */
+ CPEngDataEntry* CheckBufferedDataEntries( const TDesC& aKey );
+
+ /**
+ * Add buffered data entry pointer
+ */
+ void AddBufferedDataEntry( CPEngDataEntry* aDataEntry );
+
+ private: // New private Functions of the class
+ /**
+ * Clean B tree from all entries
+ * It will remove all entries from the B tree
+ *
+ * @since 3.0
+ */
+ void CleanTreeFromAllEntriesL();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CPEngStorageFolder( RFs& aFs,
+ const TDesC& aTempFolder,
+ RBuf16& aCommBuff );
+
+ /**
+ * Symbian 2nd phase constructor
+ */
+ void ConstructL();
+
+ private: // Data
+
+ /// REF: File server, owned by the server class
+ RFs& iFs;
+
+ /// REF: Temp folder of the Storage
+ const TDesC& iTempFolder;
+
+ /// REF: buffer used for communication, to minimize
+ RBuf16& iBuffer;
+
+
+ /// OWN: Folder name, Hashed
+ HBufC* iSessionFolder;
+
+ /// OWN: Session slot state, also has session Identification
+ CPEngSessionSlotState* iSessionState;
+
+ /// OWN: B-tree with cached entries
+ TBtreeFix<CPEngDataEntry*, TDesC*> iDataEntryTree;
+
+ /// OWN: Key for ordering of B-tree of cached entries
+ TPEngDataEntryKey iDataEntryTreeKey;
+
+ /// OWN: Handles memory management for B-Tree
+ CMemPagePool* iPool;
+
+ /// OWN: Flag if B-tree is connected
+ TBool iTreeConnected;
+
+ /// OWN: Container with the Observers, owned and also members are owned
+ CObjectCon* iObservers;
+
+ /// REF: Last used data entries
+ CPEngDataEntry* iBuffDataEntry0;
+ CPEngDataEntry* iBuffDataEntry1;
+ CPEngDataEntry* iBuffDataEntry2;
+ };
+
+#endif // __CPENGSTORAGEFOLDER_H__
+
+// End of File