--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/ServiceInc/CCnUiGroupChannel.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,346 @@
+/*
+* Copyright (c) 2004 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: Generic event and message channel for Connection UI.
+*
+*/
+
+
+
+#ifndef __CCNUIGROUPCHANNEL_H
+#define __CCNUIGROUPCHANNEL_H
+
+// INCLUDES
+#include "MIMPSSharedData.h"
+#include "MIMPSSharedDataObserver.h"
+#include "IMPSSharedDataDefs.h"
+
+#include <E32Base.h>
+#include <impspresenceconnectionuiconstsng.h>
+
+//CONTANTS
+_LIT( KGroupChannelKeyNameFormatter, "MC%dG%d" );
+_LIT( KGroupChannelDataKeyNameFormatter, "DC%dG%d" );
+
+_LIT( KGlobalChannelKeyNameFormatter, "GMC%d" );
+_LIT( KGlobalChannelDataKeyNameFormatter, "GDC%d" );
+
+_LIT( KGlobalChannelPermanentKeyIdentifier, "P" );
+_LIT( KGlobalChannelTemporaryKeyIdentifier, "T" );
+
+//Identifier is inserted in the start of key ==> index 0
+const TInt KGlobalChannelTypeIdPosition = 0;
+
+
+const TInt KMaxChannelKeyLength = 10;
+const TInt KMaxChannelIdValue = 10;
+
+
+
+// FORWARD DECLARATIONS
+class MCnUiGroupChannelListener;
+
+
+/**
+ * Notification group id for global (client group wide)
+ * notifications
+ * @since 2.1
+ */
+enum TGCSpecialGroupIds
+ {
+ ECnUiGlobalGroup = EIMPSConnClientPEC - 1,
+ };
+
+
+/**
+ * Notification channel ID's
+ * @since 2.1
+ */
+enum TGCChannelID
+ {
+ ECnUiClientLoginLogoutStateChannel = 0,
+ ECnUiLoginLogoutEventChannel = 1,
+ ECnUiSSClientReqistrationChannel = 2,
+ ECnUiGlobalOperationSignalChannel = 3,
+ ECnUiRemoteUiNotificationsChannel = 4
+ };
+
+
+
+// CLASS DECLARATION
+
+/**
+ * Generic event and message channel for Connection UI.
+ *
+ * @since 2.1
+ */
+NONSHARABLE_CLASS( CCnUiGroupChannel ) : public CBase,
+ public MIMPSSharedDataObserver
+ {
+public: // Two-phased constructors and destructor
+
+ /**
+ * Two-phased constructor, constructs the
+ * CCnUiGroupChannel object.
+ *
+ * @since 2.1
+ * @param aGroupId The channel group ID.
+ * @param aChannelId The channel ID.
+ * @param aTemporary Is the channel temporary or permanent.
+ * @return is pointer to CCnUiGroupChannel object.
+ */
+ static CCnUiGroupChannel* NewLC( TInt aGroupId,
+ TGCChannelID aChannelId,
+ TBool aTemporary = ETrue );
+
+
+ /**
+ * Two-phased constructor, constructs the
+ * CCnUiGroupChannel object.
+ *
+ * @since 2.1
+ * @param aGroupId The channel group ID.
+ * @param aChannelId The channel ID.
+ * @param aTemporary Is the channel temporary or permanent.
+ * @return is pointer to CCnUiGroupChannel object.
+ */
+ static CCnUiGroupChannel* NewL( TInt aGroupId,
+ TGCChannelID aChannelId,
+ TBool aTemporary = ETrue );
+
+
+ /**
+ * Destructor.
+ */
+ ~CCnUiGroupChannel();
+
+
+private: //Constructors
+
+ /**
+ * C++ default constructor.
+ */
+ CCnUiGroupChannel( TInt aGroupId,
+ TGCChannelID aChannelId );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( TBool aTemporary );
+
+
+public: //New methods
+
+ /**
+ * Writes the given message to opened channel.
+ *
+ * @since 2.1
+ * @param aMsg The message to write.
+ */
+ void WriteL( TInt aMsg );
+
+ /**
+ * Writes the given message to opened channel.
+ * Writes the given extra data channel data subchannel.
+ *
+ * @since 2.1
+ * @param aMsg The message to write.
+ * @param aExtraData The extra data to write.
+ */
+ void WriteL( TInt aMsg, const TDesC& aExtraData );
+
+ /**
+ * Reads a last message from channel.
+ *
+ * @since 2.1
+ * @param aMsg On the return contains the readed message.
+ * @return KErrNone if succesful.
+ * KErrNotFound if no data previously stored to channel,
+ * or it wasn't in numeric format.
+ */
+ TInt Read( TInt& aMsg );
+
+
+ /**
+ * Reads a last extra data from channel.
+ *
+ * @since 2.1
+ * @param aExtraData On the return contains the readed message.
+ * If no data previously stored to channel, returns empty
+ * buffer.
+ */
+ void ReadL( HBufC*& aExtraData );
+
+
+ /**
+ * Signals the channel.
+ * Increases the channel value with 1.
+ *
+ * @since 2.1
+ * @return KErrNone if succesful.
+ * KErrInUse if channel is already signalled by this object.
+ */
+ TInt SignalL();
+
+
+ /**
+ * Signals the channel.
+ * Increases the channel value with 1.
+ * Updates also the data subchannel value to given one.
+ *
+ * @since 2.1
+ * @param aExtraData The extra data to store to data sub channel.
+ * @return KErrNone if succesful.
+ * KErrInUse if channel is already signalled by this object.
+ */
+ TInt SignalL( const TDesC& aExtraData );
+
+
+ /**
+ * Cancels any previously by this object issued signal.
+ * @since 2.1
+ */
+ void CancelSignal();
+
+
+ /**
+ * Registeres to listen channel events.
+ * @since 2.1
+ * @param aListener The listener to notify channel events.
+ * Leaves with KErrInUse, if listening already started.
+ * Leaves with KErrArgument, if listener is NULL.
+ */
+ void ListenL( MCnUiGroupChannelListener* aListener );
+
+
+ /**
+ * Cancels any previously issued listen.
+ * @since 2.1
+ */
+ void CancelListen();
+
+
+ /**
+ * Gets channel group ID.
+ * @since 2.1
+ * @return Channel group ID.
+ */
+ TInt GroupID();
+
+
+ /**
+ * Gets channel channel ID.
+ * @since 2.1
+ * @return Channel ID.
+ */
+ TGCChannelID ChannelId();
+
+private: //helpers
+
+ void WriteExtraDataL( const TDesC& aExtraData );
+
+ /**
+ * Handles notify from permanent keys' changes
+ * @param aUid uid of the dll
+ * @param aKey the shared data key
+ * @param aValue the value of the key
+ */
+ void HandlePermanentKeyNotifyL( const TUid aUid,
+ const TIMPSSharedKeys aKey );
+
+ /**
+ * Handles notify from temporary keys' changes
+ * @param aUid uid of the dll
+ * @param aKey the shared data key
+ * @param aValue the value of the key
+ */
+ void HandleTemporaryKeyNotifyL( const TUid aUid,
+ const TIMPSSharedKeys aKey );
+
+
+private: //data
+
+ ///<The channel ID's, owned
+ const TInt iGroupId;
+ const TGCChannelID iChannelId;
+
+ ///<Channel & sub channel name keys, owned
+ TBuf<KMaxChannelKeyLength> iChannelKey;
+ TBuf<KMaxChannelKeyLength> iChannelDataKey;
+
+ ///<Registered listener, not owned.
+ MCnUiGroupChannelListener* iListener;
+
+ ///<Signal flag, owned
+ TBool iChannelSignaled;
+
+ // the converted channel key
+ TIMPSSharedKeys iKey;
+
+ // the converted channel data key
+ TIMPSSharedKeys iDataKey;
+
+ //Array of key pairs
+ RArray<TIMPSSharedKeyPairs> iKeys;
+
+ // Owns: the shared data handler
+ MIMPSSharedData *iSharedData;
+
+ // UID
+ TUid iUid;
+
+ };
+
+
+
+
+// CLASS DECLARATION
+
+/**
+ * Listener interface to listen channel events.
+ *
+ * @since 2.1
+ */
+NONSHARABLE_CLASS( MCnUiGroupChannelListener )
+ {
+public: // Handle events
+
+ /**
+ * Callback method to be called after channel event.
+ *
+ * @since 2.1
+ * @param aGroupId The originating channel group.
+ * @param aChannelId The originating channel.
+ * @param aChannelMsg The channel message.
+ */
+ virtual void HandleChannelMsg( TInt aGroupId,
+ TGCChannelID aChannelId,
+ TInt aChannelMsg ) = 0;
+
+
+protected: //Destructor
+
+ /**
+ * Virtual inline destructor.
+ * Observer can't be destructed using this interface.
+ *
+ * @since 2.1
+ */
+ virtual ~MCnUiGroupChannelListener() {};
+
+ };
+
+
+#endif //__CCNUIGROUPCHANNEL_H
+
+// End of File