mediator/inc/Server/MediatorServerCommandHandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:53:00 +0200
changeset 0 4e1aa6a622a0
permissions -rw-r--r--
Revision: 201003

/*
* Copyright (c) 2005 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:  Manages commands registered to Mediator.
*
*/

#ifndef MEDIATORSERVERCOMMANDHANDLER_H
#define MEDIATORSERVERCOMMANDHANDLER_H

// INCLUDES
#include <e32base.h>
#include "MediatorCommon.h"
#include "MediatorServerObjectHandler.h"
#include "MediatorServiceDefs.h"
#include "MediatorCommandTimer.h"


// NAMESPACE
using namespace MediatorService;

// FORWARD DECLARATIONS
class CMediatorServerObjectHandler;
class CDomain;
class CCategory;
class CItem;
class CCommand;


// CLASS DECLARATION

/**
*  Command handler class for Mediator Server.
*
*  @lib MediatorServer
*  @since S60 3.1
*/
class CMediatorServerCommandHandler : public CBase, public MMediatorTimerCallback
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        *
        * @param aObjectHandler object handler
        * @return A new CMediatorServerCommandHander instance
        */
        static CMediatorServerCommandHandler* NewL(  
                    CMediatorServerObjectHandler& aObjectHandler );
        
        /**
        * Destructor.
        */
        virtual ~CMediatorServerCommandHandler();

    public: // New functions
        
        /**
        * Register list of new commands.
        *
        * Checks that no existing commands are registered
        * @since S60 3.1
        * @param aCategory  information for the category
        * @param aCommands  list of commands to be registered
        * @param aSecureId  secure Id of the client
        * @param aObserver  observer instance for incoming commands
        * @return none.
        */
        void RegisterCommandListL( TMediatorCategory aCategory, 
                                   const RCommandList& aCommands,
                                   TSecureId aSecureId,
                                   MMediatorCommandObserver* aObserver );
                                 
         
        /**
        * Unregisters command(s)
        * @since S60 3.1
        * @param aCategory  information for the category
        * @param aCommands  list of commands to be unregistered
        * @param aSecureId  secure Id of the client
        * @return none.
        */
        void UnregisterCommandListL( TMediatorCategory aCategory, 
                                     const RCommandList& aCommands,
                                     TSecureId aSecureId  );   
       
        
        /**
        * Issue command
        * @since S60 3.1
        * @param aCategory  Information for the category
        * @param aCommand   Command information
        * @param aData      Command parameter data
        * @param aCaps      Capabilities of the client
        * @param aObserver  Command response observer
        * @return none.
        */

        void IssueCommandL( TMediatorCategory aCategory, 
                            MediatorService::TCommand aCommand,
                            const TDesC8& aData,
                            TCapabilitySet aCaps,
                            MMediatorCommandResponseObserver* aObserver );  
        
        /**
        * Issue response
        * @since S60 3.1
        * @param aCategory  Information for the category
        * @param aCommand   Command information
        * @param aData      Command parameter data
        * @param aStatus    Status of the response
        * @return error code    KErrNone                    response was issued
        *                       KMediatorErrCommandNotFound command was not found
        */

        TInt IssueResponse( TMediatorCategory aCategory, 
                            MediatorService::TCommand aCommand,
                            const TDesC8& aData,
                            TInt aStatus );  

        
        /**
        * Issue response
        * @since S60 3.1
        * @param aCategory  Information for the category
        * @param aCommand   Command information
        * @param aData      Command parameter data
        * @param aStatus    Status of the response
        * @return none.
        * @leave KMediatorErrCommandNotFound    command was not found
        */

        void IssueResponseL( TMediatorCategory aCategory, 
                             MediatorService::TCommand aCommand,
                             const TDesC8& aData,
                             TInt aStatus );                              
        
        /**
        * Cancel command
        * @since S60 3.1
        * @param aCategory  Information for the category
        * @param aCommand   Command information
        * @return none.
        */

        void CancelCommand( TMediatorCategory aCategory, 
                            MediatorService::TCommand aCommand );
                            
        
        /**
        * Cancels all the pending commands that are either 
        * registered or initiated by the client
        *
        * @since S60 3.1
        * @param aObserver          command observer
        * @param aResponseObserver  command response observer (initiator)
        * @return none.
        */
                
        void CancelCommands( MMediatorCommandObserver* aObserver, MMediatorCommandResponseObserver* aResponseObserver );
                                                        
        /**
        * Returns count of pending commands
        *
        * @since S60 3.1
        * @return count of pending commands
        */
        
        TInt CommandPendingCount() { return iCommandPendingList.Count(); }
        
    public: // From timer
    
        /**
        * Timer callback implementation
        *
        * @since S60 3.1
        * @param aDomain    domain of the command
        * @param aCategory  category of the command
        * @param aCommandId id of the command
        * @return None.
        */      
        void TimerCallBack( TUid aDomain, 
                            TUid aCategory, 
                            TInt aCommandId );                            
        
    private:

        /**
        * C++ default constructor.
        * 
        * @param aObjectHandler object handler
        */
        CMediatorServerCommandHandler(  
                    CMediatorServerObjectHandler& aObjectHandler );

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();
        
    private:    // Data
        
        // Handle to object handler
        CMediatorServerObjectHandler& iObjectHandler;
        
        // List of pending commands
        RPointerArray<CCommand>  iCommandPendingList;
        
    };

#endif      // MEDIATORSERVERCOMMANDHANDLER_H  
            
// End of File