mmsharing/mmshmanagercli/src/musmanagerimpl.cpp
changeset 22 496ad160a278
parent 0 f0cf47e981f9
child 21 ce86b6d44a6d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshmanagercli/src/musmanagerimpl.cpp	Fri Jun 11 13:36:18 2010 +0300
@@ -0,0 +1,415 @@
+/*
+* 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 "musmanagerimpl.h"
+#include "musmanager.h"
+#include "musmanageripccommon.h"
+#include "musmanagerserverstarter.h"
+#include "muslogger.h"
+#include "musavailabilityobserver.h"
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImpl()
+    : iConnected( EFalse )
+    {
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImpl( MMusAvailabilityObserver* aObserver )
+    : iConnected( EFalse ), iAvailabilityObserver( aObserver )
+    {
+    }      
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::ConstructL()
+    {
+    if ( iAvailabilityObserver )
+        {
+        iListener = CMusManagerImplListener::NewL( this ); 
+        }    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewL
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewL()
+    {
+    CMusManagerImpl* self = CMusManagerImpl::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewLC
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewLC()
+    {
+    CMusManagerImpl* self = new( ELeave ) CMusManagerImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewL 
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewL( MMusAvailabilityObserver* aObserver )
+    {
+    CMusManagerImpl* self = CMusManagerImpl::NewLC( aObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewLC
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewLC( MMusAvailabilityObserver* aObserver )
+    {
+    CMusManagerImpl* self = new( ELeave ) CMusManagerImpl( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }      
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::~CMusManagerImpl()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::~CMusManagerImpl()" );
+    delete iListener;
+    iSession.Disconnect();
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::~CMusManagerImpl()" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::StartServer()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::StartServer()" );
+    TInt error = MusManagerServerStarter::Start();
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::StartServer()" );
+    }
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+TBool CMusManagerImpl::ServerStarted()
+    {
+    return MusManagerServerStarter::Started();
+    }
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::ExamineAvailabilityL()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::ExamineAvailabilityL()" );
+    // ensure server and connection are ok
+    InitSessionL();
+
+    iSession.InvestigateAvailabilityL();
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::ExamineAvailabilityL()" );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the current availability of MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+MultimediaSharing::TMusAvailabilityStatus CMusManagerImpl::AvailabilityL()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::AvailabilityL()" );
+
+    MultimediaSharing::TMusAvailabilityStatus status;
+
+    if( !ServerStarted() )
+        {
+        status = ( MultimediaSharing::TMusAvailabilityStatus ) KErrNotReady;
+        }
+    else
+        {
+        status = QueryAvailabilityL();
+        }
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::AvailabilityL()" );
+
+    return status;
+    }
+    
+// ---------------------------------------------------------------------------
+// Forwards command to executed by MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::HandleCommandL( 
+								MultimediaSharing::TCommandType aCommandType )
+	{
+	MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::HandleCommandL()" );
+	    // ensure server and connection are ok
+    InitSessionL();
+    
+    iSession.HandleCommandL( aCommandType );
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::HandleCommandL()" );	
+	}
+// ---------------------------------------------------------------------------
+// Forwards a SIP request to be handled by MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::HandleSipRequestL( TInt aChannelId )
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::HandleSipRequestL()" );
+    // ensure server and connection are ok
+    InitSessionL();
+
+    iSession.HandleSipRequestL( aChannelId );
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::HandleSipRequestL()" );
+    }
+
+// ---------------------------------------------------------------------------
+// Starts the MultimediaSharing application.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::StartApplicationL( MultimediaSharing::TMusUseCase aUseCase )
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::StartApplicationL()" );
+    // ensure server and connection are ok
+    InitSessionL();
+
+    MultimediaSharing::TMusAvailabilityStatus status =
+        iSession.QueryAvailabilityL();
+
+    if( status < KErrNone || status >= MultimediaSharing::EErrSipRegistration )
+        {
+        MUS_LOG1( "mus: [MUSCLI]     <- CMusManagerImpl::StartApplicationL( leave: %d )",
+                 status );
+        User::Leave( status );
+        }
+
+    iSession.StartL( aUseCase );
+
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::StartApplicationL()" );
+    }
+
+// ---------------------------------------------------------------------------
+// Stops the MultimediaSharing application.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::StopApplicationL()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::StopApplicationL()" );
+    // ensure server and connection are ok
+    InitSessionL();
+
+    iSession.StopL();
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::StopApplicationL()" );
+    }
+
+// ---------------------------------------------------------------------------
+// Starts investigating the current availability of MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+MultimediaSharing::TMusAvailabilityStatus CMusManagerImpl::QueryAvailabilityL()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::QueryAvailabilityL()" );
+    // ensure server and connection are ok
+    InitSessionL();
+
+    MultimediaSharing::TMusAvailabilityStatus status
+                            = iSession.QueryAvailabilityL();
+
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::QueryAvailabilityL()" );
+    return status;
+    }
+
+// ---------------------------------------------------------------------------
+// Starts to monitor availability
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::MonitorAvailabilityL( TRequestStatus& aRequestStatus )
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::MonitorAvailabilityL()" );
+    
+    iPcArgs.Set( EMusManagerIpcArgAvailabilityStatus, &iPckg );
+    iSession.MonitorAvailabilityL( aRequestStatus, iPcArgs );
+ 
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::MonitorAvailabilityL()" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Starts server process, if needed, and then opens a session to it.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::InitSessionL()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::InitSessionL()" );
+    // if server not started, start it
+    if( !ServerStarted() )
+        {
+        StartServer();
+        }
+
+    // if no session, connect
+    if( !iConnected )
+        {
+        ConnectL();
+        }
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::InitSessionL()" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Connects this client to the server process; opens a session.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::ConnectL()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::ConnectL()" );
+    iSession.ConnectL();
+
+    iConnected = ETrue;
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::ConnectL()" );
+    }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CancelMonitoring()
+    {
+    MUS_LOG( "mus: [MUSCLI]  -> CMusManagerImpl::CancelMonitoring()" );
+    TRAP_IGNORE( iSession.CancelMonitoringL() );
+    MUS_LOG( "mus: [MUSCLI]  <- CMusManagerImpl::CancelMonitoring()" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Creates listener
+// ---------------------------------------------------------------------------
+//    
+CMusManagerImpl::CMusManagerImplListener* 
+    CMusManagerImpl::CMusManagerImplListener::NewL( 
+        CMusManagerImpl* aMusManagerImpl )
+    {
+    CMusManagerImplListener* self = 
+        new ( ELeave ) CMusManagerImplListener( aMusManagerImpl );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    } 
+  
+// ---------------------------------------------------------------------------
+// Constructs listener
+// ---------------------------------------------------------------------------
+//    
+CMusManagerImpl::CMusManagerImplListener::CMusManagerImplListener( 
+        CMusManagerImpl* aMusManagerImpl ) : 
+        CActive(0), iMusManagerImpl( aMusManagerImpl )
+    {
+    CActiveScheduler::Add(this);
+    }
+    
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//    
+void CMusManagerImpl::CMusManagerImplListener::ConstructL()
+    {
+    iMusManagerImpl->InitSessionL();
+    iMusManagerImpl->iSession.StartObservingAvailabilityL();
+    ListenL();
+    }    
+    
+// ---------------------------------------------------------------------------
+// Destructs listener
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImplListener::~CMusManagerImplListener() 
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Start listening availability events
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CMusManagerImplListener::ListenL()
+    {
+    iMusManagerImpl->MonitorAvailabilityL( iStatus );
+    SetActive();
+    }
+
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//    
+void CMusManagerImpl::CMusManagerImplListener::RunL()
+    {
+    iMusManagerImpl->iAvailabilityObserver->MusAvailabilityChangedL( 
+                iMusManagerImpl->iPckg() );  
+                
+    // restart monitoring                  
+    ListenL();
+    }
+    
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//        
+TInt CMusManagerImpl::CMusManagerImplListener::RunError( TInt aError )
+    {
+    MUS_LOG1( "mus: [MUSCLI]     CMusManagerImplListener::RunError: %d", \
+                 aError );
+    return aError;
+    }
+
+// ---------------------------------------------------------------------------
+// Cancel
+// ---------------------------------------------------------------------------
+//    
+void CMusManagerImpl::CMusManagerImplListener::DoCancel()
+    {
+    iMusManagerImpl->CancelMonitoring();
+    }