videoconnutility/connutility/inc/vcxconnutilpubsub.h
branchRCL_3
changeset 48 13a33d82ad98
parent 0 822a42b6c3f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoconnutility/connutility/inc/vcxconnutilpubsub.h	Wed Sep 01 12:20:37 2010 +0100
@@ -0,0 +1,254 @@
+/*
+* 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__