diff -r 000000000000 -r ba25891c3a9e ncdengine/engine/inc/catalogsclientserverserversession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/engine/inc/catalogsclientserverserversession.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,332 @@ +/* +* Copyright (c) 2006 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: Class CCatalogsClientServerServerSession declaration +* +*/ + + +#ifndef C_CATALOGS_CLIENT_SERVER_SERVER_SESSION_H +#define C_CATALOGS_CLIENT_SERVER_SERVER_SESSION_H + +#include + +#include "catalogsclientserverserver.h" +#include "catalogssession.h" + +class CCatalogsCommunicable; +class CCatalogsIncompleteMessage; +class CCatalogsContextImpl; + +/** + * Describes a server side session. + * + * ?more_complete_description + * + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CCatalogsClientServerServerSession : + public CSession2, + public MCatalogsSession + { +public: + + /** + * Used to push CObjects to Cleanup stack + */ + static void CleanupCObjectBasedClass( TAny* aCObject ); + +public: + + /** + * Static constructor. + * + * @since S60 ?S60_version + * @param aClient Client's thread. + * @param aServer The server. + * + * @return Pointer to the created session. + */ + static CCatalogsClientServerServerSession* NewL( + RThread& aClient, + CCatalogsClientServerServer& aServer ); + + /** + * Static constructor, leaves pointer on cleanup stack. + * + * @since S60 ?S60_version + * @param aClient Client's thread. + * @param aServer The server. + * + * @return Pointer to the created session. + */ + static CCatalogsClientServerServerSession* NewLC( + RThread& aClient, + CCatalogsClientServerServer& aServer ); + + /** + * Destructor. + */ + virtual ~CCatalogsClientServerServerSession(); + + /** + * Function that informs possible message receivers + * that client-side has died and deletes references + * to possible message receivers also deleting ixes. + * Deletes also incomplete messages. Informs server + * that client-side session is down. + * + * @since S60 ?S60_version + */ + void ClientSideSessionDown(); + + /** + * Function that creates incomplete message object that is + * used to complete the message send later. + * + * @since S60 ?S60_version + * @param aOutputData Return descriptor that should be written + * to client side. + * @param aStatus Complete value for the message that should be + * used when completing the message later. + * @return Handle to the incomplete message. + */ + TInt WriteToLargerDesL( const TDesC8& aOutputData, TInt aStatus ); + + /** + * Function that creates incomplete message object that is + * used to complete the message send later. + * + * @since S60 ?S60_version + * @param aOutputData Return descriptor that should be written + * to client side. + * @param aStatus Complete value for the message that should be + * used when completing the message later. + * @return Handle to the incomplete message. + */ + TInt WriteToLargerDesL( const TDesC16& aOutputData, TInt aStatus ); + + /** + * Uses handle to remove an incomplete message + * + * @since S60 ?S60_version + * @param aHandle Handle to the message + */ + void RemoveIncompleteMessage( TInt aHandle ); + + +public: + +// from base class CSession + + /** + * From CSession. + * Service request from client. + * + * @since S60 ?S60_version + * @param aMessage Message from client. + */ + void ServiceL( const RMessage2& aMessage ); + + +// from base class MCatalogsSession + + + /** + * From MCatalogsSession. + * Used to add object to possible receivers of messages in this + * session. Calls Open() once for the given CObject. + * NOTICE: After construction the reference count of the + * CObject is one, and after adding it to the + * receivers, it is two. + * + * @since S60 ?S60_version + * @param aObject Pointer to a object that should be added to + * receiver-list. + * @return Handle to the added object. + */ + TInt AddObjectL( CObject* aObject ); + + /** + * From MCatalogsSession. + * Used to remove object from possible receivers of messages + * in this session. Closes once the CObject into which the + * handle points. + * + * @since S60 ?S60_version + * @param aHandle Handle to the object that should be removed. + */ + void RemoveObject( TInt aHandle ); + + /** + * From MCatalogsSession. + * Get context information of the session. + * + * @since S60 ?S60_version + * @return Context information of the session. + */ + MCatalogsContext& Context(); + + + const MCatalogsContext* ContextPtr() const; + + +private: + + /** + * Constructor. + * + * @param aClient Client's thread. + * @param aServer The server. + * @param aInstanceId Instance id of the session. + */ + CCatalogsClientServerServerSession( + RThread& aClient, + CCatalogsClientServerServer& aServer, + TInt aInstanceId ); + + /** + * Second phase construct. + */ + void ConstructL() ; + + + /** + * Function that handles and forwards received message. + * + * @since S60 ?S60_version + * @param aMessage Message from client. + */ + void HandleMessageL( const RMessage2& aMessage ); + + /** + * Function that handles and forwards received message that + * is pointed to a external receiver (not a internal message). + * + * @since S60 ?S60_version + * @param aMessage Message from client. + */ + void HandleExternalMessageL( const RMessage2& aMessage ); + + /** + * Function that handles received internal message. + * @since S60 ?S60_version + * @param aMessage Message from client. + */ + void HandleInternalMessageL( const RMessage2& aMessage ); + + /** + * Function used to create a provider. + * + * @since S60 ?S60_version + * @param aMessage Message containing information needed in the creation + */ + void CreateProviderL( const RMessage2& aMessage ); + + /** + * Function used to create context-object for this session. + * + * @since S60 ?S60_version + * @param aMessage Message containing information needed in the creation + */ + void CreateContextL( const RMessage2& aMessage ); + + /** + * Panics client. + * + * @since S60 ?S60_version + * @param aMessage Message that caused the panic + * @param aPanic Panic that was caused + */ + void PanicClient( const RMessage2& aMessage, TInt aPanic ) const; + + /** + * Uses handle to get a pointer to the receiver of a message + * + * @since S60 ?S60_version + * @param aHandle Handle to the receiver + * @return Pointer to the receiver + */ + CCatalogsCommunicable* ReceiverFromHandle( TInt aHandle ); + + /** + * Uses handle to get a pointer to an incomplete message + * + * @since S60 ?S60_version + * @param aHandle Handle to the message + * @return Pointer to the message + */ + CCatalogsIncompleteMessage* IncompleteMessageFromHandle( TInt aHandle ); + + /** + * Function that goes through message receiver ix and + * informs of the still registered objects that they + * should not try to send messages trough this session + * anymore. + * + * @since S60 ?S60_version + */ + void CloseMessageHandlers(); + +private: + + + /** + * Variable to keep track whether we already have + * announced that client-side session is closing + * down or not. + */ + enum + { + ENotInformed, + EInformed + } iClientSideDownAnnounced; + + /** + * Object that contains context-information of the client and + * needed functionality related to it. + * Own. + */ + CCatalogsContextImpl* iContext; + + /** + * Reference to the server that owns this session + */ + CCatalogsClientServerServer& iServer; + + /** + * Object index used to store references to the receiver objects + * Own. + */ + CObjectIx* iMessageHandlers; + + /** + * Object index used to store references to the incomplete messages + * Own. + */ + CObjectIx* iIncompleteMessages; + /** + * Container of incompletemessage-objects. + * Own. + */ + CObjectCon* iIncompleteMessageContainer; + + /** + * Instance id. + */ + TInt iInstanceId; + }; + +#endif // C_CATALOGS_CLIENT_SERVER_SERVER_SESSION_H +