diff -r 000000000000 -r a2952bb97e68 mmappfw_plat/mpx_common_api/inc/mpxclientlist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mpx_common_api/inc/mpxclientlist.h Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,440 @@ +/* +* 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 "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: Encapsulates all the clients +* +*/ + + +#ifndef CMPXCLIENTLIST_H +#define CMPXCLIENTLIST_H + +// INCLUDES +#include +#include +#include + +// CLASS FORWARDS +class CMPXMessageQueue; +class MMPXClientlistObserver; +class CMPXSubscription; + +/** +* Manages a list of clients. +* +* @lib mpxcommon.lib +*/ +class CMPXClientList : public CBase + { +public: + /** + * Two-phased constructor. + * + * @since S60 3.2.3 + * @param aObserver observer of the client list + * @return object of constructed + */ + IMPORT_C static CMPXClientList* NewL(MMPXClientlistObserver* aObserver = NULL); + + /** + * Destructor. + * + * @since S60 3.2.3 + */ + IMPORT_C virtual ~CMPXClientList(); + +public: + /** + * Add another client into the list. + * + * @since S60 3.2.3 + * @param aId thread id of the client + * @param aMsgQueue message queue for the client + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + */ + IMPORT_C void AddClientL(TThreadId aId, + CMPXMessageQueue* aMsgQueue); + + /** + * Add another client into the list. + * + * @since S60 3.2.3 + * @param aId thread id of the client + * @param aMode client mode + * @param aMsgQueue message queue for the client + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + */ + IMPORT_C void AddClientL(TThreadId aId, + TInt aMode, + CMPXMessageQueue* aMsgQueue); + + + /** + * Add another client into the list. + * + * @since S60 3.2.3 + * @param aId thread id of the client + * @param aMode client mode + * @param aMsgQueue message queue for the client + * @param aCategory category of the client, refer to TMPXCategory + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + */ + IMPORT_C void AddClientL(TThreadId aId, + TInt aMode, + CMPXMessageQueue* aMsgQueue, + const TInt aCategory); + + /** + * Remove a client at a specified position. + * + * @since S60 3.2.3 + * @param aIndex The position within the list from where the client is to + * be removed + * @panic USER 130, if aIndex is out of bound + */ + IMPORT_C void RemoveClient(TInt aIndex); + + /** + * The number of clients. + * + * @since S60 3.2.3 + * @return number of the clients + */ + IMPORT_C TInt ClientCount() const; + + /** + * A list of process ids of all the clients in this list. + * + * @since S60 3.2.3 + * @return array of process id of clients + */ + IMPORT_C TArray ClientProcessList() const; + + /** + * Is this (denoted by thread id) a client in this list?. + * + * @since S60 3.2.3 + * @param aId thread id of the client + * @return ETrue, the client is in the list + */ + IMPORT_C TBool IsClient(TThreadId aId) const; + + /** + * Find a client denoted by message queue in this list. + * + * @since S60 3.2.3 + * @param aMsgQueue Message queue for the client + * @return The index of the client within the list + * KErrNotFound, if no matching object can be found + */ + IMPORT_C TInt Find(const CMPXMessageQueue& aMsgQueue) const; + + /** + * Find a client denoted by thread id in the list. + * + * @since S60 3.2.3 + * @param aId thread id of the client + * @return TInt index to the client list + */ + IMPORT_C TInt Find(TThreadId aId) const; + + /** + * Return client mode. + * + * @since S60 3.2.3 + * @param aIndex index to the client + * @return the mode of client + * @panic USER 0 if aIndex out of bound + */ + IMPORT_C TInt ClientMode(TInt aIndex) const; + + /** + * Return client category. + * + * @since S60 3.2.3 + * @param aIndex index to the client + * @return the category of client + * @panic USER 0 if aIndex out of bound + */ + IMPORT_C TInt ClientCategory(TInt aIndex) const; + + + /** + * Dispatches message to all clients. + * + * @since S60 3.2.3 + * @param aMsg message, pointer to message, ownership not transferred. + * @param aError error code + */ + IMPORT_C void SendMsg(const CMPXMessage* aMsg, TInt aError); + + /** + * Dispatches message to a client. + * + * @since S60 3.2.3 + * @param aIndex index to the client + * @param aMsg message object, ownership not transferred. + * @param aError error code + */ + IMPORT_C void SendMsg(TInt aIndex, const CMPXMessage* aMsg, TInt aError); + + /** + * Adds a subscription to a client identified by a specified position. + * + * @since S60 3.2.3 + * @param aIndex The position within the list where the client is. + * @param aSubscription subscription to add. Ownership is transferred. + */ + IMPORT_C void AddSubscriptionL( + TInt aIndex, + CMPXSubscription* aSubscription); + + /** + * Removes a subscription from a client identified by a specified position. + * + * @since S60 3.2.3 + * @param aIndex The position within the list where the client is. + * @param aSubscription subscription to remove. + */ + IMPORT_C void RemoveSubscriptionL( + TInt aIndex, + const CMPXSubscription& aSubscription); + + /** + * Removes all subscriptions from a client identified by a specified position. + * + * @since S60 3.2.3 + * @param aIndex The position within the list where the client is. + */ + IMPORT_C void RemoveAllSubscriptionsL(TInt aIndex); + + /** + * Convert TMPXMessage into CMPXMessage. + * + * @since S60 3.2.3 + * @param aMsg TMPXMessage message + * @return CMPXMessage object + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @deprecated should not be used + */ + inline CMPXMessage* ConvertMsgLC(const TMPXMessage& aMsg); + + /** + * Dispatches message to all clients. + * + * @since S60 3.2.3 + * @param aMsg message + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @deprecated Use method CMPXClientList::SendMsg(const CMPXMessage* aMsg, + * TInt aError) instead. + */ + inline void SendMsgL(const TMPXMessage& aMsg); + + /** + * Dispatches message to a client. + * + * @since S60 3.2.3 + * @param aIndex index to the client + * @param aMsg message + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @deprecated Use method CMPXClientList::SendMsg(TInt aIndex, + * const CMPXMessage* aMsg, TInt aError) instead. + */ + inline void SendMsgL(TInt aIndex, const TMPXMessage& aMsg); + +private: + /** + * Encapsulates a client: all the information associated with a client of + * the playback utility interface. + * + * @lib mpxcommon.lib + */ + NONSHARABLE_CLASS(CClientId): public CBase + { + public: + /** + * Constructor. + * + * @since S60 3.2.3 + * @param aTid thread id of the client + * @param aPid process id of the client + * @param aMsgQueue message queue for the client + */ + CClientId(TThreadId aTid, + TProcessId aPid, + CMPXMessageQueue* aMsgQueue); + + /** + * Constructor. + * + * @since S60 3.2.3 + * @param aTid thread id of the client + * @param aPid process id of the client + * @param aMode client mode + * @param aMsgQueue message queue for the client + */ + CClientId(TThreadId aTid, + TProcessId aPid, + TInt aMode, + CMPXMessageQueue* aMsgQueue); + + /** + * Constructor. + * + * @since S60 3.2.3 + * @param aTid thread id of the client + * @param aPid process id of the client + * @param aMode client mode + * @param aMsgQueue message queue for the client + * @param aCategory client category + */ + CClientId(TThreadId aTid, + TProcessId aPid, + TInt aMode, + CMPXMessageQueue* aMsgQueue, + const TInt aCategory); + + /** + * Constructor. + * + * @since S60 3.2.3 + * @param aMsgQueue message queue for the client + */ + CClientId(CMPXMessageQueue* aMsgQueue); + + /** + * Constructor. + * + * @since S60 3.2.3 + * @param aTid thread id of the client + */ + CClientId(TThreadId aTid); + + /** + * Constructor. + * + * @since S60 3.2.3 + * @param aPid process id of the client + */ + CClientId(TProcessId aPid); + + /** + * Constructor. + * + * @since S60 3.2.3 + */ + CClientId(); + + /** + * Destructor. + * + * @since S60 3.2.3 + */ + virtual ~CClientId(); + + /** + * Assignment operator. + * + * @since S60 3.2.3 + * @param aClientId client ID instance to assign from. + * @return reference to the current updated instance. + */ + CClientId& operator=(const CClientId& aClientId); + + /** + * Adds a subscription to the client. + * + * @since S60 3.2.3 + * @param aSubscription subscription to add. Ownership is transferred. + */ + void AddSubscriptionL(CMPXSubscription* aSubscription); + + /** + * Removes a subscription from the client. + * + * @since S60 3.2.3 + * @param aSubscription subscription to remove. + */ + void RemoveSubscriptionL(const CMPXSubscription& aSubscription); + + /** + * Removes all subscriptions from the client. + * + * @since S60 3.2.3 + */ + void RemoveAllSubscriptionsL(); + + + public: + TThreadId iTid; + TProcessId iPid; + TInt iMode; + TInt iCategory; + CMPXMessageQueue* iMsgQueue; // Not owned + RPointerArray iSubscriptions; // array of subscriptions + }; +private: + /** + * C++ constructor. + * + * @since S60 3.2.3 + * @param aObserver observer of the client list + */ + CMPXClientList(MMPXClientlistObserver* aObserver); + + /** + * 2nd phase constructor. + * + * @since S60 3.2.3 + */ + void ConstructL(); + + /** + * Check if the msg subscribed by the client. + * + * @since S60 3.2.3 + * @param aIndex index to the client + * @param aMsg message object, ownership not transferred. + * @param leave leave with system error code + */ + TBool IsMsgSubscribedL(TInt aIndex, const CMPXMessage* aMsg); + + /** + * Comparison function. If the names are set in the client objects, then + * that's used to test for equality. Otherwise, if the thread ids are set, + * that's used. Else, it's assumed that the equality test is based on process + * ids. + * + * @since S60 3.2.3 + * @param aClient1 client id of the client 1 + * @param aClient2 client id of the client 2 + * @return ETrue if two ids are the same + */ + static TBool ClientsMatch(const CClientId& aClient1, + const CClientId& aClient2); +private: + TIdentityRelation iIdentity; + RPointerArray iClients; + RArray iClientProcesses; + MMPXClientlistObserver* iObserver; + }; + +#include "mpxclientlist.inl" + +#endif // CMPXCLIENTLIST_H