mpx/playbackframework/playbackserver/inc/mpxplaybackserversession.h
changeset 0 a2952bb97e68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/playbackframework/playbackserver/inc/mpxplaybackserversession.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,232 @@
+/*
+* 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:  Playback server session
+*
+*/
+
+
+#ifndef CMPXPLAYBACKSESSION_H
+#define CMPXPLAYBACKSESSION_H
+
+
+#include <e32cons.h>
+#include <f32file.h>
+#include <s32mem.h>
+#include <mpxplaybackengineobserver.h>
+#include "mpxplaybackserverdefs.h"
+
+class CMPXPlaybackEngine;
+class CMPXMessageQueue;
+
+/**
+* Music playback server session
+*/
+class CMPXPlaybackSession : public CSession2,
+                            public MMPXPlaybackEngineObserver
+    {
+public:
+
+    /**
+    *  Two-phased constructor. Leaves on failure.
+    *
+    *  @return The constructed object
+    */
+    static CMPXPlaybackSession* NewL();
+
+    /**
+    *  C++ constructor
+    *
+    */
+    CMPXPlaybackSession();
+
+    /**
+    *  Destructor
+    */
+    ~CMPXPlaybackSession();
+    
+private:
+
+    /**
+    *  From CSession2
+    *  Service request
+    *  @param aMessage message object
+    */
+    void ServiceL(const RMessage2& aMessage);
+
+    /**
+    *  Dispatch message
+    *
+    *  @param aMessage message object
+    *  @return message completion code
+    */
+    void DispatchMessageL( const RMessage2& aMessage, TInt& aMsgHandleResult );
+    
+    /**
+    *  Set playback mode
+    *
+    *  @param aMessage message object
+    */
+    void SetModeL(const RMessage2& aMessage);
+
+    /**
+    *  Get client id from message
+    *
+    *  @param aMessage message object
+    *  @reutrn client thread id
+    */
+    TThreadId ClientIdL(const RMessage2& aMessage);
+
+    /**
+    *  Init player from file 
+    *
+    *  @param aMessage message object
+    */
+    void InitFromFileL(const RMessage2& aMessage);
+
+    /**
+    *  Cancel outstanding requests
+    */
+    void CancelRequests();
+
+    /**
+    *  Set request as async
+    *
+    *  @param aMessage message object
+    */
+    void SetAsync(const RMessage2& aMessage);
+    
+    /**
+    *  Complete async request
+    *
+    *  @param aErr error code
+    *  @param aSlot1 message slot 1
+    *  @param aVal1 value in the slot 1
+    *  @param aSlot2 message slot 2
+    *  @param aVal2 value in the slot 2
+    */
+    void CompleteAsync(TInt aErr,
+                        TInt aSlot1 = 0, const TDesC8* aVal1 = NULL,
+                        TInt aSlot2 = 0,const TDesC8* aVal2 = NULL);
+                        
+
+    /**
+    *  Writes data from the specified source descriptor to the specified
+    *  message slot
+    *
+    *  @param aErr error code
+    *  @param aSlot1 message slot 1
+    *  @param aVal1 value in the slot 1
+    *  @param aSlot2 message slot 2
+    *  @param aVal2 value in the slot 2
+    *  @return KErrNone, if successful, otherwise system error code
+    */
+    TInt DoWriteData(TInt aSlot1 = 0, const TDesC8* aVal1 = NULL,
+                     TInt aSlot2 = 0, const TDesC8* aVal2 = NULL);
+
+    /**
+    *  Get current selection
+    *
+    *  @param aMessage message object
+    */
+    void GetSelectionL(const RMessage2& aMessage);
+    
+    /**
+    *  Helper methods for transferring variable sized arrays and objects
+    */
+    
+    /**
+    *  Create the buffer filled with player UIDs
+    *
+    *  @param aMessage message object
+    *  @return the size of buffer
+    */
+    TInt CreatePlayerUidsBufferL(const RMessage2& aMessage);
+
+    /**
+    *  Check if player is valid
+    */
+    void CheckPlayerL();
+    
+private:  
+
+    /**
+    *  From MMPXPlaybackEngineObserver
+    *  Handle playback property
+    *
+    *  @param aProperty the property
+    *  @param aValue the value of the property
+    *  @param aError error code
+    */
+    void HandleProperty(TMPXPlaybackProperty aProperty,
+                               TInt aValue, 
+                               TInt aError);
+
+    /**
+    *  From MMPXPlaybackEngineObserver
+    *  Method is called continously until aComplete=ETrue, signifying that 
+    *  it is done and there will be no more callbacks
+    *  Only new items are passed each time
+    *
+    *  @param aPlayer UID of the subplayer
+    *  @param aSubPlayers a list of sub players
+    *  @param aComplete ETrue no more sub players. EFalse more subplayer
+    *                   expected
+    *  @param aError error code
+    */
+    void HandleSubPlayerNames(TUid aPlayer,
+                              const MDesCArray* aSubPlayers,
+                              TBool aComplete,
+                              TInt aError);
+
+    /**
+    *  From MMPXPlaybackEngineObserver
+    *  Handle media properties
+    *
+    *  @param aMedia media object
+    *  @param aError error code
+    */
+    void HandleMedia(CMPXMedia* aMedia, TInt aError); 
+
+    /**
+     *  From MMPXPlaybackEngineObserver
+     *  Handle completion of a asynchronous command
+     *
+     *  @param aCommandResult result of the command, NULL if error
+     *  @param aError error code    
+     */
+     void HandlePlaybackCommandComplete(CMPXCommand* aCommandResult, 
+                                        TInt aError);
+    
+private:
+
+    /**
+    *  2nd phase constructor
+    */
+    void ConstructL();
+    
+private:
+    CMPXPlaybackEngine* iPlayer;
+    RMessage2 iMessage;    
+    TBool iCompleteRequest;
+    //
+    // Data for client, for current request
+    //
+    CBufBase* iSyncBuffer;
+    CBufBase* iAsyncBuffer;
+    CMPXMedia* iMedia;
+    CMPXMessageQueue* iMessageQueue; // Message queue
+    };
+        
+#endif // CMPXPLAYBACKSESSION_H
+