diff -r 000000000000 -r 094583676ce7 presadap12/Parser2/Inc/CPEngSessionSlotState.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presadap12/Parser2/Inc/CPEngSessionSlotState.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,398 @@ +/* +* 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: Presence Engine Session Slot State container. +* +*/ + +#ifndef __CPENGSESSIONSLOTSTATE_H__ +#define __CPENGSESSIONSLOTSTATE_H__ + +// INCLUDES +#include +#include +#include "PEngPresenceEngineConsts2.h" + + + + +// DATA TYPES + +/** + * Data selection enmumeration to select + * which parts of the CPEngSessionSlotState + * to stream. + * + * @since 3.0 + */ +enum TPEngDataSelection + { + /** + * Session Slot Id part. + */ + EIdentification = 0x00000001, + + /** + * Registered application IDs part. + */ + ERegistredIDs = 0x00000010, + + /** + * State specific data. + * Active Application Ids and the state part. + */ + EStateSpecific = 0x00000100, + + + + //Mixed fields for real storage purposes. + + /** + * Only Session Slot Id and Registered application IDs. + */ + EPermanentData = EIdentification | ERegistredIDs, + + + /** + * Whole state container data without the Slot ID. + */ + EPureState = ERegistredIDs | EStateSpecific, + + + /** + * Whole state container data. + */ + EWholeState = EIdentification | ERegistredIDs | EStateSpecific, + + }; + + + +// FORWARD DECLARATIONS +class RWriteStream; +class RReadStream; +class CPEngSessionSlotId; +class CPEngSessionSlotEvent; + + + + +// CLASS DECLARATION + + +/** +* Presence Engine Session Slot State container. +* It is used infernally by the PE for transportation +* of the slot state between the engine components +* and also to maintain the slot state both +* in permanent and cached memory. +* +* @since 3.0 +*/ +class CPEngSessionSlotState : public CBase + { + public: // Construction + + /** + * Instantiates CPEngSessionSlotState object. + * + * @return New CPEngSessionSlotState instance. + */ + IMPORT_C static CPEngSessionSlotState* NewL( ); + IMPORT_C static CPEngSessionSlotState* NewLC( ); + + + /** + * Destructor. + */ + ~CPEngSessionSlotState(); + + protected: + + /** + * C++ constructor. + */ + CPEngSessionSlotState(); + + + + public: // Getters + + /** + * Session Slot ID identification + * + * @since 3.0 + * @return session slot ID identification class + */ + IMPORT_C CPEngSessionSlotId& SessionSlotId( ) const; + + + /** + * Session slot Online state + * + * @since 3.0 + * @return session slot state + */ + IMPORT_C TPEngNWSessionSlotState SessionSlotState() const; + + + /** + * Gets list of Application IDs which are registered + * to this Session Slot. + * + * @since 3.0 + * @return descriptor array with application IDs + */ + IMPORT_C const MDesC16Array& RegisteredApplications() const; + + + /** + * Gets list of Application IDs which are active with + * this Session Slot. + * + * @since 3.0 + * @return descriptor array with application IDs + */ + IMPORT_C const MDesC16Array& ActiveApplications() const; + + + /** + * Gets certain application state from + * the session slot state. + * + * @since 3.0 + * @param aAppId Application Id for which to get the state. + * @return State of the requested application Id. + */ + IMPORT_C TPEngNWSessionSlotState AppState( const TDesC& aAppId ) const; + + + /** + * Checks if application is registered to this session slot. + * If application is not registered, leaves with KErrNotFound + * + * @since 3.0 + * @param aAppId Application Id to check. + */ + IMPORT_C void ApplicationRegisteredL( const TDesC& aAppId ) const; + + + + + public: // Setters + + /** + * Set session slot ID. + * + * @since 3.0 + * @param aSlotId New session slot Id. + * @param aOwnershipTransfered ETrue if aSlotId ownership is + * transfered to CPEngSessionSlotState instance + */ + IMPORT_C void SetSessionSlotId( CPEngSessionSlotId& aSlotId, + TBool aOwnershipTransfered = EFalse ); + + + /** + * Sets Session Slot State as closed. + * + * @since 3.0 + */ + IMPORT_C void SetSessionSlotStateClosed(); + + + /** + * Update Session Slot State based on the event. + * + * @since 3.0 + * @param aSessEvent Session Slot event. + * @return ETrue if state was updated because of event and + * state needs to be stored to permanent storage. + * Else EFalse. + */ + IMPORT_C TBool UpdateStateL( const CPEngSessionSlotEvent& aSessEvent ); + + + /** + * Updates and commits the Session Slot State + * based on the event. + * + * @since 3.0 + * @param aSessEvent Session Slot event. + * @return ETrue if state was updated because of event and + * state needs to be stored to permanent storage. + * Else EFalse. + */ + IMPORT_C TBool UpdateAndCommitStateL( const CPEngSessionSlotEvent& aSessEvent ); + + + /** + * Rollback last change + * + * @since 3.0 + */ + IMPORT_C void RollBackLastUpdate(); + + + /** + * Commit last change + * + * @since 3.0 + */ + IMPORT_C void CommitLastUpdate(); + + + + public: // Export import of the state + + /** + * Internalize Session Slot state from stream. + * + * @since 3.0 + * @param aStream stream to internalize from + * @param aSelection selection flag describing what to internalize + */ + IMPORT_C void InternalizeL( RReadStream& aStream, + TPEngDataSelection aSelection ); + + + /** + * Externalize Session Slot state to stream + * + * @since 3.0 + * @param aStream stream to externalize + * @param aSelection selection flag describing what to externalize + */ + IMPORT_C void ExternalizeL( RWriteStream& aStream, + TPEngDataSelection aSelection ) const; + + + /** + * Packs Session Slot State to the buffer. + * + * @since 3.0 + * @param aSelection selection flag describing what to pack + * @return Buffer with streamed session slot state data. + * Buffer ownership is returned to caller. + */ + IMPORT_C HBufC8* PackDataLC( TPEngDataSelection aSelection ) const; + IMPORT_C void PackDataL( TPEngDataSelection aSelection, RBuf8& aBuf ) const; + + + /** + * Unpacks Session Slot State from the passed descriptor + * + * @since 3.0 + * @param aDes Descriptor to unpack from. + * @param aSelection selection flag describing what to unpack + */ + IMPORT_C void UnpackDataL( const TDesC8& aDes, + TPEngDataSelection aSelection ); + + /** + * Size of needed stream to externalizate the container. + * + * @since 3.0 + * @param aSelection selection flag describing what + * to calculate to the size. + * @return size of the buffer in the bytes + */ + IMPORT_C TInt Size( TPEngDataSelection aSelection ) const; + + + + private: //Helpers + + /** + * Add registered Application Id + * + * @since 3.0 + * @param aAppId application Id to be added + */ + void AddRegisteredAppIdL( const TDesC& aAppId ); + + + /** + * Remove registered Application Id + * + * @since 3.0 + * @param aAppId application Id to be removed + */ + void RemoveRegisteredAppIdL( const TDesC& aAppId ); + + + /** + * Add Active Application Id + * + * @since 3.0 + * @param aAppId application Id to be added + */ + void AddActiveAppIdL( const TDesC& aAppId ); + + + /** + * Remove Active Application Id + * + * @since 3.0 + * @param aAppId application Id to be removed + */ + void RemoveActiveAppId( const TDesC& aAppId ); + + /** + * Checks is the Application Id registered or not + * + * @since 3.0 + * @param aAppId application Id to be check. + * @return ETrue if app id is registered. Else EFalse. + */ + TBool ApplicationRegistered( const TDesC& aAppId ) const; + + + + private: // data + + //OWN/REF: Session Slot ID + CPEngSessionSlotId* iSessionId; + + //OWN: Is previous session Slot ID owned or not + TBool iSessionIdOwned; + + //OWN: Session Slot State + TPEngNWSessionSlotState iState; + + //OWN: Active Application's Application IDs + CDesCArrayFlat iActiveApps; + + //OWN: Registered Application's Application IDs + CDesCArrayFlat iRegisteredApps; + + + + // Roll back support for app id changes + + //OWN: Index of added active Id + TInt iActiveAdded; + + //OWN: Index of removed active Id + TInt iActiveRemoved; + + //OWN: Index of added Registered Id + TInt iRegAdded; + + //OWN: Index of removed Registered Id + TInt iRegRemoved; + + }; + +#endif // __CPENGNWSESSIONSLOTEVENT_H__ +// End of File \ No newline at end of file