diff -r 000000000000 -r a2952bb97e68 mpx/playbackframework/playbackserver/inc/mpxplaybackserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/playbackframework/playbackserver/inc/mpxplaybackserver.h Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,193 @@ +/* +* 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: Playback server +* +*/ + + +#ifndef CMPXPLAYBACKSERVER_H +#define CMPXPLAYBACKSERVER_H + +#include +#include "mpxclientlistobserver.h" +#include "mpxplaybackserverdefs.h" +#include "mpxplaybackactiveengineobserver.h" + +class CMPXPlaybackEngine; +class CMPXMessageQueue; +class CTspClientMapper; +class CMPXPluginMonitor; + +/** +* Music playback server +*/ +NONSHARABLE_CLASS(CMPXPlaybackServer) : public CPolicyServer, + public MMPXPlaybackActiveEngineObserver, + public MMPXClientlistObserver + { +public: + + /** + * Two-phased constructor. Leaves on failure. + * + * @return The constructed object + */ + static CMPXPlaybackServer* NewL(); + + /** + * Destructor + */ + ~CMPXPlaybackServer(); + + /** + * Create a player for a specific client, or returns an existing player + * depending on the mode and whether it already exists. + * + * @param aModeId playback mode id + * @param aClientId thread id of the client + * @aMsgQueue message queue for the client + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + */ + CMPXPlaybackEngine* CreatePlayerL(const TUid& aModeId, + const TInt aCategory, + TThreadId aClientId, + CMPXMessageQueue* aMsgQueue); + + /** + * Increments number of sessions this server holds + */ + void AddClient(); + + /** + * Decrements number of sessions this server holds, and if now zero, shuts + * down server. ALSO removes client from player, and if the player has no + * more clients, it gets deleted. + * + * @param aMsgQueue message queue for the client + */ + void RemoveClient(const CMPXMessageQueue& aMsgQueue); + + /** + * Retursn last active process id + * + * @return process id of last active process + */ + TProcessId LastActiveProcessId(); + +private: + + /** + * Add a new player + * + * @param aClientId thread id of the client + * @param aModeId playback mode id + * @aMsgQueue message queue for the client + * @param aCategory category of engine + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @return pointer to engine + */ + CMPXPlaybackEngine* AddNewPlayerL(TThreadId aClientId, + const TUid& aModeId, + CMPXMessageQueue* aMsgQueue, + const TInt aCategory); + + /** + * Attach to a default player within the same thread + * + * @param aClientId thread id of the client which attachs to existing player + * @aMsgQueue message queue for the client + * @param aCategory category of engine + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @return pointer to engine or NULL if not found + */ + CMPXPlaybackEngine* AddToDefaultPlayerL(TThreadId aClientId, + CMPXMessageQueue* aMsgQueue, + const TInt aCategory); + + /** + * Returns index of recent active player + * + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @return index to recent active player, KErrNotFound if not found + */ + TInt IndexOfRecentActivePlayer(); + + /** + * Returns index of recent active player + * @param aCategory category of engine + * @leave The function leaves with one of the system wide error codes, + * if the operation fails. + * @return index to recent active player, KErrNotFound if not found + */ + TInt IndexOfRecentActivePlayer(TInt aCategory); + +private: + + /** + * C++ constructor + * + * @param aPriority priority of server + * @param aPolicy security policy + */ + CMPXPlaybackServer(TInt aPriority, const TPolicy &aPolicy); + + /** + * 2nd phase constructor + */ + void ConstructL(); + +private: // from base class + /** + * From MMPXPlaybackActiveEngineObserver + * Handle active engine + * + * @param aEngine pointer to active engine + * @param aActive ETrue activated, EFalse deactivated + */ + void HandleActiveEngineL(const CMPXPlaybackEngine* aEngine, TBool aActive); + + /** + * From CPolicyServer/CServer2 + * Create a new session + * + * @param aVersion version of the server + * @param aMessage message object + */ + CSession2* NewSessionL(const TVersion& aVersion, + const RMessage2& aMessage) const; + + /** + * From MMPXClientlistObserver + * Observer client change + */ + void HandleClientChange(const TProcessId& aPid, + MMPXClientlistObserver::TChangeType aChangeType); + +private: + // The players are sorted by the time activated. In other word, the last + // active player is always the first item. + RPointerArray iPlayers; + TInt iClients; + CMPXPluginMonitor* iPluginMonitor; +#ifdef RD_TSP_CLIENT_MAPPER + CTspClientMapper* iClientMapper; +#endif + }; + +#endif // CMPXPLAYBACKSERVER_H +