ncdengine/engine/inc/catalogsclientserverserver.h
changeset 0 ba25891c3a9e
child 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/inc/catalogsclientserverserver.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,242 @@
+/*
+* 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 CCatalogsClientServerServer declaration
+*
+*/
+
+
+#ifndef C_CATALOGS_CLIENT_SERVER_SERVER_H
+#define C_CATALOGS_CLIENT_SERVER_SERVER_H
+
+#include <e32base.h>
+
+#include "catalogsshutdownoperation.h"
+
+class CCatalogsServerEngine;
+class MCatalogsSession;
+class MCatalogsContext;
+
+class CCatalogsClientServerServer : 
+    public CServer2, 
+    public MCatalogsShutdownOperationObserver
+    {
+public:
+
+
+    /**
+     * Static constructor, leaves pointer on cleanup stack
+     */
+    static CCatalogsClientServerServer* NewLC();
+
+    /**
+     * Destructor
+     */
+    virtual ~CCatalogsClientServerServer();
+
+    /**
+     * Main function for the server thread.
+     * 
+     * @since S60 ?S60_version
+     * @param aNone  Not used.
+     * @return System wide error code.
+     */
+    static TInt ThreadFunction( TAny* aNone );
+
+    /**
+     * Increments the count of the active sessions for this server.
+     *
+     * @since S60 ?S60_version
+     */
+    void IncrementSessions();
+
+    /**
+     * Decrements the count of the active sessions for this server.
+     *
+     * @since S60 ?S60_version
+     */
+    void DecrementSessions();
+ 
+    /**
+     * Informs objects of session removal. They should not use
+     * given session in anyway anymore
+     *
+     * @since S60 ?S60_version
+     * @param aSession Session that is not in use anymore.
+     */   
+    void HandleSessionRemoval( MCatalogsSession& aSession );
+
+    /**
+     * Create a new object container. Called by sessions.
+     *
+     * @since S60 ?S60_version
+     * @return Created object container.
+     */
+    CObjectCon* NewContainerL();
+
+    /**
+     * Removes an object container. Called by sessions.
+     *
+     * @since S60 ?S60_version
+     * @param aCon Container that should be removed.
+     */
+    void RemoveContainer( CObjectCon* aCon );
+
+
+    /**
+     * Adds an object to container. These objects are objects
+     * that communicate to client-side. Called by sessions. Leaves
+     * on error, but not if the object is tried to add for a second
+     * time into the container. Then simply does not do anything.
+     *
+     * @since S60 ?S60_version
+     * @param aObject Object that is communicable.
+     */    
+    void AddObjectToContainerL( CObject* aObject );      
+    
+    /**
+     * Function that conveys provider creation request to the
+     * engine.
+     * 
+     * @since S60 ?S60_version
+     * @param aSession Interface to register objects.
+     * @param aProviderIdentifier Int (uid) to identify desired provider
+     * @param aHandle Reference to an integer which is used to
+     *                       pass the handle to the created provider back.
+     * @param aProviderOptions Provider options
+     */    
+    void CreateProviderL( MCatalogsSession& aSession, 
+                         TInt aProviderIdentifier,
+                         TInt& aHandle,
+                         TUint32 aProviderOptions );
+                         
+    TInt NewInstanceId();
+    
+    /**
+     * Adds a shutdown operation to the server's operation queue
+     * The operation is deleted if appending fails
+     * 
+     * @return Symbian error code
+     */
+    static TInt AddShutdownOperation( CCatalogsShutdownOperation* aOperation );
+    
+    /**
+     * Executes/cancels shutdown operations for the given client
+     * 
+     * @param aContext
+     * @param aExecute If ETrue, shutdown operations are executed, 
+     * if false they are canceled
+     */
+    void OperateShutdownOperations( 
+        const MCatalogsContext& aContext,
+        TBool aExecute );
+
+    
+protected: // MCatalogsShutdownOperationObserver
+
+    
+    void ShutdownOperationComplete( 
+        CCatalogsShutdownOperation* aOperation, 
+        TInt aError );
+    
+
+protected:  // Methods from CActive
+
+// from base class CActive    
+
+    /**
+     * From CActive
+     * @see CActive::RunError
+     *
+     * @since S60 ?S60_version
+     */
+    TInt RunError( TInt aError );
+            
+private:
+    
+    /**
+     * Constructor
+     * 
+     * @param aPriority Priority for this thread.
+     */
+    CCatalogsClientServerServer( TInt aPriority );
+
+    /**
+     * Second phase construct.
+     */
+    void ConstructL();
+
+    /**
+     * Second stage startup for the server thread.
+     *
+     * @since S60 ?S60_version
+     */
+    static void ThreadFunctionL();
+
+
+// from base class CServer    
+
+    /**
+     * From CServer
+     * @see CServer::NewSessionL
+     *
+     * @since S60 ?S60_version
+     */
+    CSession2* NewSessionL( const TVersion& aVersion, 
+                            const RMessage2& aMsg ) const;
+
+private:
+    
+    static CCatalogsClientServerServer* iCatalogsServer;
+    
+    /**
+     * Amount of sessions.
+     */
+    TInt iSessionCount;
+    
+    /**
+     * Server-side engine
+     * Own.
+     */    
+    CCatalogsServerEngine* iEngine;
+    
+    
+    /**
+     * Object container index
+     * Own.
+     */
+	CObjectConIx* iContainerIndex;
+	
+    /**
+     * Container of objects that are registered as objects which
+     * communicate to client-side.
+     * Own.
+     */
+    CObjectCon* iContainer;
+
+#ifdef CATALOGS_UNDERTAKER
+
+    RProcess    iUndertakerProcess;
+
+#endif
+    
+    /**
+     * Counter, used for identifying session instances.
+     */
+    TInt iSessionInstanceIdCounter;
+    
+    RPointerArray<CCatalogsShutdownOperation> iShutdownOperations;
+    };
+
+#endif // C_CATALOGS_CLIENT_SERVER_SERVER_H
+