contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserversession.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:30:05 +0300
branchRCL_3
changeset 74 edd621764147
parent 51 15e4dd19031c
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
 * Copyright (c) 2008 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:  Server Session
 *
 */

#ifndef C_CCPSERVERSESSION_H
#define C_CCPSERVERSESSION_H

// INCLUDES
#include <e32base.h>

// FORWARD DECLARATIONS
#ifdef CONTENT_PUBLISHER_DEBUG
class CCPDebug;
#endif
class CLiwGenericParamList;
class CLiwDefaultMap;
class CLiwDefaultList;
class CCPServer;
class CCPDataManager;
class CCPLiwMap;
class CCPActionHandlerThread;
class CCPNotificationHandler;
struct TPointersForSession;

// CLASS DECLARATION
/** 
 *  Server side session representation
 *
 *  @since Series 60 5.0
 */
class CCPServerSession : public CSession2
    {

public:
    // New methods

    /**
     * Two-phased constructor.
     */
    static CCPServerSession* NewL(TPointersForSession& aPasser);

    /**
     * Two-phased constructor.
     */
    static CCPServerSession* NewLC(TPointersForSession& aPasser);

    /**
     * Destroy the object and release all memory objects
     */
    virtual ~CCPServerSession();

public:
    // From CSession

    /**
     * Called after a service request from client
     * @param aMessage message from client (containing requested operation 
     * and any data)
     */
    void ServiceL(const RMessage2& aMessage);

    /**
     * Selects correct function from message
     * @param aMessage message from client (containing requested operation and any data) 
     * @param aCompleteRequest flag for marking need of completing request
     */
    void DispatchMessageL(const RMessage2& aMessage, TBool& aCompleteRequest);

private:
    // New methods

    /**
     * Standard C++ constructor.
     */
    CCPServerSession();

    /**
     * Perform the second phase construction of a CCPServerSession object
     */
    void ConstructL(TPointersForSession& aPasser);

    /**
     * Add Data request
     * @param Message from client
     */
    void AddDataL(const RMessage2& aMessage);

    /**
     * Specific add data request - data is not actually added to database
     * but notification is send.
     * @param Message from client
     */
    void AddDataNonPersistentL(const RMessage2& aMessage);

    /**
     * Get data request - first phase
     * @param Message from client
     */
    void GetListSizeL(const RMessage2& aMessage);

    /**
     * Get data request - second phase
     * @param Message from client
     */
    void GetListDataL(const RMessage2& aMessage);

    /**
     * Remove data request
     * @param Message from client
     */
    void RemoveDataL(const RMessage2& aMessage);

    /**
     * Executes action request
     * @param Message from client
     */
    void ExecuteActionL(const RMessage2& aMessage);

    /**
     * Executes actions and sends notifications
     * @param aMap input map from client
     * @param aEnableCache indicates if action data should be cached
     * @param aOptions command options
     */
    void ExecuteActionL(const CCPLiwMap* aMap,
            TBool aEnableCache, TUint aOptions);
    
    /**
     * Executes multiple actions request
     * @param Message from client
     */
    void ExecuteMultipleActionsL(const RMessage2& aMessage);

    /**
     * Executes action request
     * @param aActionParams list with actions
     */
    void ExecuteL(const CLiwGenericParamList& aActionParams);

    /**
     * Register for notification request
     * @param Message from client
     */
    void RegisterObserverL(const RMessage2& aMessage);

    /**
     * Adds new observer
     * @param Message from client
     */
    void AddObserverL(const RMessage2& aMessage);

    /**
     * Removes observer
     * @param Message from client
     */
    void RemoveObserverL(const RMessage2& aMessage);

    /**
     * Unregister from notification request
     * @param Message from client
     */
    void UnregisterObserverL();

    /**
     * Send information about change in database to client
     * @param Message from client
     */
    void GetChangeInfoDataL(const RMessage2& aMessage);

    /**
     * Converts CLiwGenericParamList to descriptor and
     * sends to client
     * @param Message to complete 
     * @param Parameters for message
     */
    void ExternalizeAndWriteToClientL(const RMessage2& aMessage,
            const CLiwGenericParamList* outParamList);

    /**
     * Unpacks message from client to map
     * @param Message to complete 
     * @return CCPLiwMap with data from client
     */
    CCPLiwMap* UnpackFromClientLC(const RMessage2& aMessage);

    /**
     * Send notification
     * @param aNotificationList
     */
    void SendNotificationL(CCPLiwMap* aMap,
            CLiwDefaultList* aNotificationList);

    /**
     * Get and Execute Activate or Deactivate action from the DB 
     * @param Map containing ids of item
     */
    void GetAndExecuteActionL( CCPLiwMap* aMap, CLiwDefaultList* aNotificationList,
    		TBool aInsertTrigger = EFalse );

    /**
     * Get Server Lock
     * @return ETrue if aMessege cannot be processed
     * because Backup or Restore is running 
     **/
    TBool GetServerLock(const RMessage2& aMessage);

    /**
     * Unpacks data for ExecuteMultipleActions from client
     * @param Message from client
     * @return list containing input data from the client
     **/
    CLiwGenericParamList* UnpackForMultiExecuteLC(const RMessage2& aMessage);

    /**
     * Checks map validity of input data and returns list 
     * that can be used to call execute
     * @param aMaps input data
     * @return list containing input maps for Execute
     **/
    CLiwDefaultList* CheckValidityLC(const CLiwList* aMaps);
    
private:

    /*
     * Own.
     * Handler for asynchronous request for notifications
     */
    CCPNotificationHandler* iNotificationHandler;

    /*
     * Not own.
     * True if message is register
     */
    TBool isRegister;

    /*
     * Not own.
     * Pointer to Content Publisher Server
     */
    CCPServer* iServer;

    /*
     * Not own.
     * Manager to send and receive data beetween server and storage 
     */
    CCPDataManager* iDataManager;

    /*
     * Own.
     * List write to message with getList function
     */
    CLiwGenericParamList* iParamList;

    /*
     * Not Own.
     * Manager to prepare and execute action
     */
    CCPActionHandlerThread* iActionHandlerThread;
    
#ifdef CONTENT_PUBLISHER_DEBUG
    CCPDebug* iDebug;
#endif
    };

#endif // C_CCPSERVERSESSION_H