diff -r 000000000000 -r f0cf47e981f9 mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp Thu Dec 17 08:44:37 2009 +0200 @@ -0,0 +1,360 @@ +/* +* 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 "musunittesting.h" + +#include "musmanagerservercore.h" +#include "musapplicationmanager.h" +#include "musavailabilitypluginmanager.h" +#include "musmonitoravailabilityobserver.h" +#include "muslogger.h" +#include "musmanagerservercoreobserver.h" +#include "musmanager.h" + +using namespace MultimediaSharing; + +// CONSTANTS + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::NewL +// ----------------------------------------------------------------------------- +// +CMusManagerServerCore* CMusManagerServerCore::NewL( + MMusManagerServerCoreObserver& aObserver ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::NewL()" ); + + CMusManagerServerCore* self = CMusManagerServerCore::NewLC( aObserver ); + CleanupStack::Pop( self ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::NewL()" ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::NewLC +// ----------------------------------------------------------------------------- +// +CMusManagerServerCore* CMusManagerServerCore::NewLC( + MMusManagerServerCoreObserver& aObserver ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::NewLC()" ); + + CMusManagerServerCore* self + = new( ELeave ) CMusManagerServerCore( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::NewLC()" ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::CMusManagerServerCore +// ----------------------------------------------------------------------------- +// +CMusManagerServerCore::CMusManagerServerCore( MMusManagerServerCoreObserver& aObserver ) + : iObserver( aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::ConstructL +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::ConstructL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::ConstructL" ); + + iApplicationManager = CMusApplicationManager::NewL(); + + iPluginManager = CMusAvailabilityPluginManager::NewL( *this, *iApplicationManager ); + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::ConstructL" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::~CMusManagerServerCore +// ----------------------------------------------------------------------------- +// +CMusManagerServerCore::~CMusManagerServerCore() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::CMusManagerServerCore" ); + + // inform ui via application manager (via session api) + + delete iPluginManager; + + delete iApplicationManager; + + // go through interested client sessions + StopMonitoring(); + iAvailabilityMonitors.Close(); + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::CMusManagerServerCore" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::~CMusManagerServerCore +// ----------------------------------------------------------------------------- +// +MultimediaSharing::TMusAvailabilityStatus CMusManagerServerCore::AvailabilityQueryL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::AvailabilityQueryL" ); + MultimediaSharing::TMusAvailabilityStatus status + = iPluginManager->Availability(); + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::AvailabilityQueryL" ); + return status; + } + // ----------------------------------------------------------------------------- +// CMusManagerServerCore::InvestigateAvailability +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::CommandL( MultimediaSharing::TCommandType aCommandType ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::CommandL" ); + if ( aCommandType == MultimediaSharing::ECommandManualActivation ) + { + MUS_LOG( "mus: [MUSSRV] Manual Activation is started" ) + iPluginManager->ManualQueryL(); + } + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::CommandL" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::InvestigateAvailability +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::InvestigateAvailabilityL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::InvestigateAvailabilityL" ); + iPluginManager->InvestigateAvailabilityL(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::InvestigateAvailabilityL" ); + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::InvitationReceived +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::InvitationReceivedL( TUid aChannelId ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::InvitationReceivedL" ); + + TInt uid = aChannelId.iUid; + + if( uid == CMusManager::ESipInviteDesired && + iPluginManager->ApplicationAllowed() ) + { + // write session boundary values + iApplicationManager->WriteSessionPropertiesL( + MultimediaSharing::EMusReceive, + iPluginManager->Availability(), + iPluginManager->SessionParametersL() ); + + iApplicationManager->StartApplicationL(); + } + else if( uid == CMusManager::ESipInviteNotDesired ) + { + iPluginManager->InvitationReceivedL(); + } + else + { + User::Leave( KErrNotReady ); + } + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::InvitationReceivedL" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::OptionsReceivedL( TUid /*aChannelId*/ ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::OptionsReceivedL" ); + iPluginManager->OptionsReceivedL(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::OptionsReceivedL" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::StartMultimediaSharingL( MultimediaSharing::TMusUseCase aUseCase ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::StartMultimediaSharingL" ); + if( !iApplicationManager->ApplicationRunning() && + iPluginManager->ApplicationAllowed() ) + { + // write session boundary values + iApplicationManager->WriteSessionPropertiesL( + aUseCase, + iPluginManager->Availability(), + iPluginManager->SessionParametersL() ); + + // start actual application + iApplicationManager->StartApplicationL(); + } + else + { + iApplicationManager->ShowApplicationL(); + } + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::StartMultimediaSharingL" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::StopMultimediaSharingL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::StopMultimediaSharingL" ); + iApplicationManager->StopApplicationL(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::StopMultimediaSharingL" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::EventNoSessions() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::EventNoSessions" ); + TRAPD( error, iPluginManager->StopPluginL() ); + if( error ) + { + // iObserver.StopServer(); + } + iObserver.StopServer(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::EventNoSessions" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::PluginStopped() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::PluginStopped" ); + if( iObserver.SessionCount() == 0 ) + { + iObserver.StopServer(); + } + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::PluginStopped" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::AvailabilityChangedL( + MultimediaSharing::TMusAvailabilityStatus aAvailability ) + { + MUS_LOG1( "mus: [MUSSRV] -> CMusManagerServerCore::AvailabilityChangedL( %d )", + aAvailability ); + // inform ui via application manager (via session api) + + iApplicationManager->WriteSessionPropertiesL( + aAvailability, + iPluginManager->SessionParametersL() ); + + if( iAvailabilityMonitors.Count() ) + { + // go through interested client sessions + for( TInt i=0; iAvailabilityChangedL( + aAvailability ); + } + } + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::AvailabilityChangedL" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::CancelMonitoring( MMusMonitorAvailabilityObserver* aObserver ) + { + TInt index = iAvailabilityMonitors.Find( aObserver ); + + if( index != KErrNotFound ) + { + iAvailabilityMonitors[index]->RequestComplete(); + iAvailabilityMonitors.Remove( index ); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::RegisterObserverL( + MMusMonitorAvailabilityObserver* aObserver ) + { + if( iAvailabilityMonitors.Find( aObserver ) == KErrNotFound ) + { + iAvailabilityMonitors.AppendL( aObserver ); + } + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::RegisterObserver" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::RemoveObserver( MMusMonitorAvailabilityObserver* aObserver ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::RemoveObserver" ); + TInt index = iAvailabilityMonitors.Find( aObserver ); + + if( index != KErrNotFound ) + { + iAvailabilityMonitors.Remove( index ); + } + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::RemoveObserver" ); + } + +// ----------------------------------------------------------------------------- +// From MMusAvailabilityPluginManagerObserver. +// Starts live video sharing. +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::StartLiveSharingL() + { + StartMultimediaSharingL( MultimediaSharing::EMusLiveVideo ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::StopMonitoring() + { + // go through interested client sessions + for( TInt i=0; iRequestComplete(); + iAvailabilityMonitors.Remove( i ); + } + } + +// End of File