mmsharing/mmshmanagersrv/src/musmanagerserversession.cpp
changeset 0 f0cf47e981f9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshmanagersrv/src/musmanagerserversession.cpp	Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,258 @@
+/*
+* 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:  ?Description
+*
+*/
+
+
+#include <e32base.h>
+
+#include "muslogger.h"
+#include "musmanageripccommon.h"
+#include "musmanagerserveritcutility.h"
+#include "musmanagerserversession.h"
+#include "musmanagerserversessionobserver.h"
+#include "musmanagerserver.h"
+
+
+const TInt KServerRequestPending = 1;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+CMusManagerServerSession::CMusManagerServerSession(
+    CMusManagerServer& aServer,
+    MMusManagerServerSessionObserver& aObserver )
+    : CSession2(), iServer( aServer ), iServerCore( aObserver )
+    {
+    iServer.IncrementSessions();
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerServerSession::ConstructL()
+    {
+ 
+    }
+
+
+// ---------------------------------------------------------------------------
+// First phase constructor.
+// ---------------------------------------------------------------------------
+//
+CMusManagerServerSession* CMusManagerServerSession::NewL(
+    CMusManagerServer& aServer,
+    MMusManagerServerSessionObserver& aObserver )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerSession::NewL()" );
+    CMusManagerServerSession* self = CMusManagerServerSession::NewLC(
+        aServer,
+        aObserver );
+    CleanupStack::Pop( self );
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::NewL()" );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// First phase constructor.
+// ---------------------------------------------------------------------------
+//
+CMusManagerServerSession* CMusManagerServerSession::NewLC(
+    CMusManagerServer& aServer,
+    MMusManagerServerSessionObserver& aObserver )
+    {
+    CMusManagerServerSession* self = new( ELeave ) CMusManagerServerSession(
+        aServer,
+        aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Standard destructor.
+// ---------------------------------------------------------------------------
+//
+CMusManagerServerSession::~CMusManagerServerSession()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerSession::~CMusManagerServerSession()" );
+    iServer.DecrementSessions();
+    iServerCore.CancelMonitoring( this );
+    iAvailabilityStatus.Close();
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::~CMusManagerServerSession()" );
+    }
+    
+// -----------------------------------------------------------------------------
+// Start to monitor availability states for this session.
+// -----------------------------------------------------------------------------
+//
+TInt CMusManagerServerSession::MonitorAvailabilityL()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerSession::MonitorAvailabilityL" );			
+    if ( iAvailabilityStatus.Count() )
+    	{
+    	MusManagerServerItcUtility::WriteAvailabilityReportL( 
+		iMessage, iAvailabilityStatus[0] );                         
+	    iAvailabilityStatus.Remove( 0 );
+	    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::\
+	    	MonitorAvailabilityL" );
+	    return KErrNone;	
+    	}
+   	else
+   		{
+   		MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::\
+   			MonitorAvailabilityL" );
+   		return KServerRequestPending;	
+   		}
+    }
+
+// ---------------------------------------------------------------------------
+// Receives incoming messages.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerServerSession::ServiceL( const RMessage2& aMessage )
+    {
+    MUS_LOG1( "mus: [MUSSRV]     -> CMusManagerServerSession::ServiceL( %d )",
+              ( TInt ) aMessage.Function() );
+    TMusManagerIpcFunctions function
+        = ( TMusManagerIpcFunctions )aMessage.Function();
+
+    TInt retVal( KErrNone );
+
+    switch ( function )
+        {
+    case EMusManagerIpcAvailabilityQuery:
+        {
+        TInt capability = iServerCore.AvailabilityQueryL();
+        MusManagerServerItcUtility::WriteAvailabilityL(
+            aMessage,
+            capability );
+
+        iLastReport = ( MultimediaSharing::TMusAvailabilityStatus )capability;
+        break;
+        }
+    case EMusManagerIpcInvestigateAvailability:
+        {
+        TRAP( retVal, iServerCore.InvestigateAvailabilityL() );
+        break;
+        }
+    case EMusManagerIpcInvitationReceived:
+        {
+        TUid channelId
+            = MusManagerServerItcUtility::ReadChannelIdL( aMessage );
+
+        TRAP( retVal, iServerCore.InvitationReceivedL( channelId ) );
+
+        break;
+        }
+    case EMusManagerIpcOptionsReceived:
+        {
+        TUid channelId
+            = MusManagerServerItcUtility::ReadChannelIdL( aMessage );
+
+        TRAP( retVal, iServerCore.OptionsReceivedL( channelId ) );
+        break;
+        }
+    case EMusManagerIpcStartMultimediaSharing:
+        {
+        TInt useCase
+            = MusManagerServerItcUtility::ReadUseCaseL( aMessage );
+
+        TRAP( retVal, iServerCore.StartMultimediaSharingL(
+                        (MultimediaSharing::TMusUseCase) useCase ) );
+        break;
+        }
+    case EMusManagerIpcStopMultimediaSharing:
+        {
+        TRAP( retVal, iServerCore.StopMultimediaSharingL() );
+        break;
+        }
+     case EMusManagerIpcStartObservingAvailability:
+        {
+        iServerCore.RegisterObserverL( this ); 
+        break;
+        }    
+     
+    case EMusManagerIpcMonitorAvailability:
+        {
+        iMessage = aMessage;
+        retVal = MonitorAvailabilityL(); 
+        }
+        break;
+    case EMusManagerIpcCancelMonitoring:
+        {
+        iServerCore.CancelMonitoring( this );
+        }
+        break;
+    case EMusManagerIpcHandleCommand:
+        {
+        TInt command
+            = MusManagerServerItcUtility::ReadCommandL( aMessage );
+
+        TRAP( retVal, iServerCore.CommandL(
+                        ( MultimediaSharing::TCommandType ) command ) );
+        }
+        break;
+
+    default:
+        break;
+        }
+	
+    MUS_LOG1( "mus: [MUSSRV]  - Message compleated with code  %d", retVal );
+  	aMessage.Complete( retVal );	
+
+	MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::ServiceL()" );
+    }
+
+void CMusManagerServerSession::AvailabilityChangedL(
+    					MultimediaSharing::TMusAvailabilityStatus aAvailability )
+    {
+    MUS_LOG1( "mus: [MUSSRV]  -> CMusManagerServerCore::AvailabilityChangedL( %d )",
+              aAvailability );
+    // inform ui via application manager (via session api)
+    if( iAvailabilityStatus.Count() && !iMessage.IsNull()  )
+    	{
+    	iAvailabilityStatus.AppendL( aAvailability );	
+    	MusManagerServerItcUtility::WriteAvailabilityReportL( 
+			iMessage, iAvailabilityStatus[0] );                         
+	    iAvailabilityStatus.Remove( 0 );
+	    iMessage.Complete( KErrNone );
+    	}
+    else if ( iMessage.IsNull() )
+    	{
+    	iAvailabilityStatus.AppendL( aAvailability );	                      
+    	}
+    else
+    	{
+    	MusManagerServerItcUtility::WriteAvailabilityReportL( 
+			iMessage, aAvailability );  
+		iMessage.Complete( KErrNone ); 	
+    	}
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::AvailabilityChangedL()" );
+    }
+
+void CMusManagerServerSession::RequestComplete()
+	{
+	MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerSession::RequestComplete()" );
+ 	iMessage.Complete( KErrCancel );
+  	MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerSession::RequestComplete()" );	
+	}
+