--- a/videoscheduler/SchedulerServer/src/CCseSchedulerMultiPluginController.cpp Thu Aug 19 10:54:18 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,353 +0,0 @@
-/*
-* 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 the License "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: Base class for multi plugin controllers*
-*/
-
-
-
-
-
-// INCLUDE FILES
-#include "CCseSchedulerMultiPluginController.h"
-#include "CseDebug.h" // Debug macros
-#include "CCseSchedulerPluginStarter.h"
-#include "CCseSchedulerLandLord.h"
-#include <ipvideo/CCseScheduledProgram.h>
-#include "CCseSchedulerTimer.h"
-#include "CCseSchedulerServerEngine.h"
-#include "CCseSchedulerThreadPacket.h"
-
-// EXTERNAL DATA STRUCTURES
-// None.
-
-// EXTERNAL FUNCTION PROTOTYPES
-// None.
-
-// CONSTANTS
-// None
-
-// MACROS
-// None.
-
-// LOCAL CONSTANTS AND MACROS
-// None.
-
-// MODULE DATA STRUCTURES
-// None.
-
-// LOCAL FUNCTION PROTOTYPES
-// None.
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerPluginControllerBase::CCseSchedulerMultiPluginController
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CCseSchedulerMultiPluginController::CCseSchedulerMultiPluginController(
- CCseSchedulerServerEngine& aEngine,
- TInt32 aPluginUid ) :
- CCseSchedulerPluginControllerBase( aEngine, aPluginUid )
-
- {
- CSELOGSTRING_HIGH_LEVEL(
- ">>>CCseSchedulerMultiPluginController::CCseSchedulerMultiPluginController");
-
- CSELOGSTRING_HIGH_LEVEL(
- "<<<CCseSchedulerMultiPluginController::CCseSchedulerMultiPluginController");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCseSchedulerMultiPluginController* CCseSchedulerMultiPluginController::NewL(
- CCseSchedulerServerEngine& aEngine,
- TInt32 aPluginUid )
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::NewL");
-
- CCseSchedulerMultiPluginController* self =
- new( ELeave ) CCseSchedulerMultiPluginController( aEngine, aPluginUid );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::NewL");
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::ConstructL()
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::ConstructL");
-
- CCseSchedulerPluginControllerBase::ConstructL();
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::ConstructL");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::~CCseSchedulerMultiPluginController
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CCseSchedulerMultiPluginController::~CCseSchedulerMultiPluginController()
- {
- CSELOGSTRING_HIGH_LEVEL(
- ">>>CCseSchedulerMultiPluginController::~CCseSchedulerMultiPluginController");
-
- iLandLords.ResetAndDestroy( );
- iLandLords.Close();
-
- CSELOGSTRING_HIGH_LEVEL(
- "<<<CCseSchedulerMultiPluginController::~CCseSchedulerMultiPluginController");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::RunPluginsL
-//
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::RunPluginsL()
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::RunPluginsL");
- TBool scheduleAlreadyRunning( EFalse );
-
- if(iScheduleArray.Count() >0 )
- {
- // Kick those schedules running that aren't already running
- for( TInt i = 0; i < iScheduleArray.Count(); i++)
- {
- for ( TInt ii = 0; ii < iLandLords.Count(); ii++ )
- {
- if( iScheduleArray[i]->DbIdentifier() ==
- iLandLords[ii]->ThreadPacket()->Schedule()->DbIdentifier() )
- {
- scheduleAlreadyRunning = ETrue;
- }
- }
- if( !scheduleAlreadyRunning )
- {
- if( iEngine.IsAllowedToRun( iScheduleArray[i]->DbIdentifier() ) )
- {
- // Create new LandLord for each schedule to be run
- CCseSchedulerLandLord* landLord = CCseSchedulerLandLord::NewL( this );
-
- CleanupStack::PushL( landLord );
-
- // Set schedule for LandLord
- landLord->SetScheduleL( *iScheduleArray[i] );
-
- // Increase run count
- iEngine.IncreaseScheduleRunCountL( iScheduleArray[0]->DbIdentifier() );
-
- // Order the LandLord to run plugin
- landLord->RunPluginL();
-
- CleanupStack::Pop( landLord );
-
- // Add created landLord to array. Destroyed later when landLord
- // is not needed anymore.
- iLandLords.AppendL( landLord );
-
- CleanupStack::Pop( landLord );
- }
- else
- {
- // Schedule cannot be run anymore due to security reasons
- // Signal engine to remove schedule from DB
- iEngine.ScheduleNotValid( iScheduleArray[i]->DbIdentifier() );
-
- // Remove schedule own list
- delete iScheduleArray[i];
- iScheduleArray.Remove( i );
- i--;
- }
- }
- }
- if( iLandLords.Count() == 0 )
- {
- // We've gone through all our schedules and still no LandLords.
- // We need to request new schedules.
- iEngine.RequestReschedule();
- }
- }
- else
- {
- // No schedules...!?!? REEEEESCHEDULE!!!
- iEngine.RequestReschedule();
- }
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::RunPluginsL");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::ScheduleCompletedL
-//
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::ScheduleCompletedL( const TUint32 aDbIdentifier,
- TInt aCompletitionCode )
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::ScheduleCompletedL");
-
- if ( aCompletitionCode == KErrNone )
- {
- ScheduleCompletedSuccesfullyL( aDbIdentifier );
- }
- else
- {
- HandleScheduleErrorL( aDbIdentifier, aCompletitionCode );
- }
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::ScheduleCompletedL");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerUniPluginController::ScheduleCompletedSuccesfullyL
-//
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::ScheduleCompletedSuccesfullyL( const TUint32 aDbIdentifier )
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::ScheduleCompletedSuccesfullyL");
-
- // Remove schedule from list
- for ( TInt i = 0; i < iScheduleArray.Count(); i ++)
- {
- if( iScheduleArray[i]->DbIdentifier() == aDbIdentifier )
- {
- delete iScheduleArray[i];
- iScheduleArray.Remove( i );
- }
- }
-
- // Notify engine about completition.
- iEngine.ScheduleCompletedSuccesfullyL( aDbIdentifier );
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::ScheduleCompletedSuccesfullyL");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::HandleScheduleErrorl
-//
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::HandleScheduleErrorL( const TUint32 aDbIdentifier,
- TUint32 aCompletitionCode )
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::HandleScheduleError");
-
- // Here we could try to handle plugin errors. Problem is that scheduler doesn't
- // know anything about schedule it is running and so there cannot be tailored
- // error handling for each plugin. In the end, we just complete schedule
- // to engine with error code (ends up removing schedule from DB).
-
- // Remove schedule from list
- for ( TInt i = 0; i < iScheduleArray.Count(); i ++)
- {
- if( iScheduleArray[i]->DbIdentifier() == aDbIdentifier )
- {
- delete iScheduleArray[i];
- iScheduleArray.Remove( i );
- break;
- }
- }
-
- iEngine.ScheduleCompletedWithErrorL( aDbIdentifier, aCompletitionCode );
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::HandleScheduleError");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::DoCleanUp::DoCleanUp
-//
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::DoCleanUp( )
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::DoCleanUp");
- TBool scheduleFound( EFalse );
-
- // Check all LandLords. If we found that there is no schedules related to
- // one we destroy it.
- for (TInt i = iLandLords.Count(); i > 0; i--)
- {
- for ( TInt ii = 0; ii < iScheduleArray.Count(); ii++ )
- {
- // Compare LandLords DbIdentifier with the ones in schedules
- if( iLandLords[i-1]->ThreadPacket()->Schedule()->DbIdentifier() ==
- iScheduleArray[ii]->DbIdentifier() )
- {
- scheduleFound = ETrue;
- break;
- }
- }
- // Remove LandLord if there is no schedule for it.
- if( !scheduleFound )
- {
- delete iLandLords[i-1];
- iLandLords.Remove(i-1);
- }
- scheduleFound = EFalse;
- }
-
-
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::DoCleanUp");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::ClearPlugin
-//
-// -----------------------------------------------------------------------------
-//
-void CCseSchedulerMultiPluginController::ClearControllerL( )
- {
- CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerMultiPluginController::ClearControllerL");
- for( TInt i = 0 ; i < iLandLords.Count() ; i++ )
- {
- iLandLords[i]->ClearL();
- }
- CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerMultiPluginController::ClearControllerL");
- }
-
-// -----------------------------------------------------------------------------
-// CCseSchedulerMultiPluginController::IsControllerActive
-//
-// -----------------------------------------------------------------------------
-//
-TBool CCseSchedulerMultiPluginController::IsControllerActive( )
- {
- TBool retVal( EFalse );
-
- for( TInt i = 0; i < iLandLords.Count(); i++ )
- {
- if( iLandLords[i]->IsWorking() )
- {
- retVal = ETrue ;
- break;
- }
- }
- return retVal;
- }
-
-// End of file.