videoconnutility/connutility/inc/vcxconnutilpubsub.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:37 +0100
branchRCL_3
changeset 48 13a33d82ad98
parent 0 822a42b6c3f1
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201029 Kit: 201035

/*
* 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 the License "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:    Pubsub handler class for vcxconnectionutility*
*/




#ifndef __CVCX_CONUTILPUBSUB_H__
#define __CVCX_CONUTILPUBSUB_H__

#include <e32base.h>
#include <e32std.h>
#include <e32property.h>


class CVcxConnUtilSubscriber;
class MConnUtilPubsubObserver;

/**
* This class defines operations for handling the pub sub keys and their values.
*
*/
NONSHARABLE_CLASS( CVcxConnUtilPubSub ) : public CBase
    {	
    public: // construction / destruction
    
        /**
         * Construction.
         * 
         * @return The newly constructed CVcxConnUtilPubSub
         */
        static CVcxConnUtilPubSub* NewL( MConnUtilPubsubObserver *aObserver );
    
        /**
         * Construction. Object left to cleanupstack
         * 
         * @return The newly constructed CVcxConnUtilPubSub
         */
        static CVcxConnUtilPubSub* NewLC( MConnUtilPubsubObserver *aObserver );
        
        /**
         * destructor
         */
        virtual ~CVcxConnUtilPubSub();
                        
    private:
            
        /**
         * C++ constructor
         */
        CVcxConnUtilPubSub(); 
            
        /**
         * Private 2nd phase construction.
         *
         * During instantiation, the availibility of the PS keys is being checked. In case
         * keys does not exists, they are being created by starting an external executable,
         * vcxconnutilpsworker, whose UID is being used as the unique category of the PS keys.
         * This kind of solution is needed to make sure, that category is always unique and 
         * the UID of the category is always known beforehand in vcxconnectionutility library 
         * 
         * @param aObserver observer to be passed subscribers
         */
        void ConstructL( MConnUtilPubsubObserver *aObserver );  
        
            
    public: // new functions
        
        /**
         * Increases a "counter" pub sub value by one.
         * If given key is not concidered as a counter,
         * nothing is done
         *  
         * @param aKey    PS key whose value to increase
         */ 
        void IncCounterPubSubL( TUint32 aKey );
        
        /**
         * Decreases a "counter" pub sub value by one
         * If given key is not concidered as a counter,
         * nothing is done
         *  
         * @param aKey    PS key whose value to decrease
         */ 
        void DecCounterPubSubL( TUint32 aKey ); 
        
        /**
         * Saves given value to the defined PS key.
         * 
         * @param aKey    PS to where to save the value
         * @param aValue  Value to save
         * 
         * @return TInt   KErrNone is succees, KerrNotFound if provided key is
         *                not in the scope of connection util or another 
         *                system level error code
         *  
         */ 
        TInt SetValue( TUint32 aKey, TInt aValue );
        
        /**
         * Get value from  defined PS key.
         * 
         * @param aKey    PS from where to fetch value
         * @param aValue  
         * 
         * @return TInt   KErrNone is succees, KerrNotFound if provided key is
         *                not in the scope of connection util or another 
         *                system level error code
         *  
         */ 
        TInt GetValue( TUint32 aKey, TInt& aValue );
        
        /**
         * Start subscribers. If using deafult value, starts all.
         * Otherwise just starts the one defined as aKey
         * 
         * @param aKey    key value of subscriber to start 
         */
        void StartSubscibers( TUint32 aKey = 0 );
        
        /**
         * Cancels subscribers. If using deafult value, cancels all.
         * Otherwise just cancels the one defined as aKey
         * 
         * @param aKey    key value of subscriber to cancel 
         *  
         */
        void CancelValueSubscribers( TUint32 aKey = 0 );
        
   private:

       /**
        * Method starts a vcxconnutilpsworker -process
        * to create PS keys for connectionutility and 
        * waits for the process to finish before returning.
        * 
        * If another process has already started worker, method
        * waits for it to finish.
        * 
        * Method leaves if existing semaphore cannot be opened or
        * creating of process fails.
        *  
        */
        void DefinePropertiesL();
        
        /**
         * Internal helper method to get a pointer to RProperty
         * defined by the aKey -value.
         * In case aKey refers to a property that does not exists,
         * a null pointer is returned
         * 
         * @param aKey a key value for property wanted
         * 
         * @return RProperty* pointer to property or NULL in case 
         *                    property is not found 
         */
        RProperty* GetProperty( TUint32 aKey );
        
        /**
         * Internal helper method to get a pointer to Subscriber
         * defined by the aKey -value.
         * In case aKey refers to a Subscriber that does not exists,
         * a null pointer is returned
         * 
         * @param aKey a key value for subscriber wanted
         * 
         * @return CVcxConnUtilSubscriber* pointer to Subscriber or NULL in case 
         *                                 property is not found 
         */
        CVcxConnUtilSubscriber* GetSubscriber( TUint32 aKey );
        
         /**
         * Internal helper method to handle actual incrementation or 
         * decrementation (based on the calfactor) of the PS key concidered 
         * to be a counter value in connectionutility's context.
         * 
         * @leave if PS Get or Set fails
         * 
         * @param aKey a key value for subscriber wanted
         * 
         * @param aCalcFactor a value to be added to the PS key value
         */
        void DoPSCounterIncrementL( TUint32 aKey, TInt aCalcFactor );
       
   private:

        /**        
         * P&S Current IAP's Id
         */
        RProperty iPropertyCurrentIAPId;

        /**
         * P&S Current Destination's Id
         */
        RProperty iPropertyCurrentSNAPId;
                       
        /**
         * P&S telling how many instances are using connection
         */
        RProperty iPropertyNbrOfInst;
        
        /**
         * P&S telling how many instances 
         * have accepted roaming
         */
        RProperty iPropertyAccepted;
    
        /**
         * P&S telling Connection state property.
         * Object contains PS property for connection state -key and
         * subcribe -listener for that value changes
         */
        CVcxConnUtilSubscriber* iConnectionStatePS;
                
        /**
         * P&S telling if we currently have master instance or not
         * Object contains PS property for masterexist -key and
         * subcribe -listener for that value changes
         */
        CVcxConnUtilSubscriber* iMasterExistPS;
        
        /**
         * P&S telling the roaming request status from
         * the instances
         */
        CVcxConnUtilSubscriber* iRoamingReqStatusPS;
        
        /**
         * P&S telling the amount of connection users responded
         * roaming request
         */
        CVcxConnUtilSubscriber* iNbrInstanceResp;
        
        /**
         * Semaphore to protect critical counter -PS 
         * increment and decrement operations.          
         */
         RSemaphore iSemaCounter;
        
    };

#endif // __CVCX_CONUTILPUBSUB_H__