--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoconnutility/connutility/inc/vcxconnutilpubsub.h Thu Dec 17 09:14:38 2009 +0200
@@ -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__