diff -r 000000000000 -r ba25891c3a9e ncdengine/engine/inc/catalogsclientserverserver.h --- /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 + +#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 iShutdownOperations; + }; + +#endif // C_CATALOGS_CLIENT_SERVER_SERVER_H +