ncdengine/engine/inc/catalogsclientserverserversession.h
changeset 0 ba25891c3a9e
--- /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 <e32base.h>
+
+#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
+