diff -r 7fdc9a71d314 -r 8ad140f3dd41 stif/TestServer/src/TestThreadContainerRunnerFactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stif/TestServer/src/TestThreadContainerRunnerFactory.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,368 @@ +/* +* Copyright (c) 2009 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: This module contains the implementation of +* CTestthreadContainerRunnerFactory class member functions. +* +*/ + +// INCLUDE FILES +#include +#include "TestThreadContainerRunner.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 + +// FORWARD DECLARATIONS +// None + + +// ================= MEMBER FUNCTIONS ========================================= + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: NewL + + Description: NewL is first phase of two-phased constructor. + + NewL is first phase of two-phased constructor. + + Parameters: TThreadId aThreadId: in: main thread id. + CActiveScheduler* aScheduler: in: Pointer to main thread active scheduler. + CUiEnvProxy* aUiEnvProxy: in: Pointer to UIEnvProxy. + + Return Values: Pointer to new CTestServerThreadStarter object. + + Errors/Exceptions: Leaves if new or ConstructL leaves. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +EXPORT_C CTestThreadContainerRunnerFactory* +CTestThreadContainerRunnerFactory::NewL( TThreadId aThreadId, CActiveScheduler* aScheduler, CUiEnvProxy* aUiEnvProxy ) + { + CTestThreadContainerRunnerFactory* self = + new(ELeave)CTestThreadContainerRunnerFactory(); + CleanupStack::PushL( self ); + self->ConstructL( aThreadId, aScheduler, aUiEnvProxy ); + CleanupStack::Pop( self ); + return self; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: CTestThreadContainerRunnerFactory + + Description: Default constructor. + + Default constructor. + + Parameters: None. + + Return Values: None. + + Errors/Exceptions: None. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +CTestThreadContainerRunnerFactory::CTestThreadContainerRunnerFactory() +:CActive( EPriorityNormal ), +iTestThreadContainerRunner( NULL ), +iOperation( ENone ) + { + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: ~CTestThreadContainerRunnerFactory + + Description: Default destructor. + + Default destructor. + + Parameters: None. + + Return Values: None. + + Errors/Exceptions: None. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +CTestThreadContainerRunnerFactory::~CTestThreadContainerRunnerFactory() + { + Cancel(); + iOperationEndSemaphore.Close(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: ConstructL + + Description: Second phase of two-phased constructor. + + Second phase of two-phased constructor. + + Parameters: TThreadId aThreadId: in: main thread id. + CActiveScheduler* aScheduler: in: Pointer to main thread active scheduler. + CUiEnvProxy* aUiEnvProxy: in: Pointer to UIEnvProxy. + + Return Values: None. + + Errors/Exceptions: None. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +void CTestThreadContainerRunnerFactory::ConstructL( TThreadId aThreadId, CActiveScheduler* aScheduler, CUiEnvProxy* aUiEnvProxy ) + { + User::LeaveIfNull( aScheduler ); + iThreadId = aThreadId; + iScheduler = aScheduler; + iUiEnvProxy = aUiEnvProxy; + + TInt ret = iOperationEndSemaphore.CreateLocal( 0 ); + if ( ret != KErrNone ) + { + User::Leave( ret ); + } + + iScheduler->Add( this ); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: DeleteL + + Description: Performs creation of CTestThreadContainerRunner object. + + Performs creation of CTestThreadContainerRunner object. + + Parameters: CTestThreadContainerRunner* aTestThreadContainerRunner: in: Pointer to + CTestThreadContainerRunner object which needs to be deleted. + + Return Values: None. + + Errors/Exceptions: Leaves if one of the called method leavs. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +CTestThreadContainerRunner* CTestThreadContainerRunnerFactory::CreateL() + { + if ( IsActive() ) + { + User::Panic( _L( "E32USER-CBase" ), 42 ); + } + + iOperation = ECreate; + iStatus = KRequestPending; + + RThread thread; + TInt ret = thread.Open( iThreadId ); + if ( ret != KErrNone ) + { + User::Leave( ret ); + } + + SetActive(); + TRequestStatus* statusPtr = &iStatus; + thread.RequestComplete( statusPtr, KErrNone ); + thread.Close(); + iOperationEndSemaphore.Wait(); + + return iTestThreadContainerRunner; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: DeleteL + + Description: Performs deletion of CTestThreadContainerRunner object. + + Performs deletion of CTestThreadContainerRunner object. + + Parameters: CTestThreadContainerRunner* aTestThreadContainerRunner: in: Pointer to + CTestThreadContainerRunner object which needs to be deleted. + + Return Values: None. + + Errors/Exceptions: Leaves if one of the called method leavs. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +void CTestThreadContainerRunnerFactory::DeleteL( CTestThreadContainerRunner* aTestThreadContainerRunner ) + { + if ( IsActive() ) + { + User::Panic( _L( "E32USER-CBase" ), 42 ); + } + + iOperation = EDelete; + iStatus = KRequestPending; + + RThread thread; + TInt ret = thread.Open( iThreadId ); + if ( ret != KErrNone ) + { + User::Leave( ret ); + } + + iTestThreadContainerRunner = aTestThreadContainerRunner; + SetActive(); + TRequestStatus* statusPtr = &iStatus; + thread.RequestComplete( statusPtr, KErrNone ); + thread.Close(); + iOperationEndSemaphore.Wait(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: RunL + + Description: RunL derived from CActive handles the completed requests. + + RunL derived from CActive handles the completed requests. + + Parameters: None. + + Return Values: None. + + Errors/Exceptions: Leaves if one of the called method leavs. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +void CTestThreadContainerRunnerFactory::RunL() + { + switch( iOperation ) + { + case ECreate: + { + iTestThreadContainerRunner = CTestThreadContainerRunner::NewL( iThreadId, iScheduler ); + } + break; + case EDelete: + { + delete iTestThreadContainerRunner; + iTestThreadContainerRunner = NULL; + } + break; + default: + { + User::Panic( _L("STIFInternalError"), KErrNotFound ); + } + break; + } + iOperation = ENone; + iOperationEndSemaphore.Signal(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: DoCancel + + Description: DoCancel derived from CActive handles the Cancel. + + DoCancel derived from CActive handles the Cancel. + + Parameters: None. + + Return Values: None. + + Errors/Exceptions: None. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +void CTestThreadContainerRunnerFactory::DoCancel() + { + } + +/* +------------------------------------------------------------------------------- + + Class: CTestThreadContainerRunnerFactory + + Method: GetUiEnvProxy + + Description: Gets UIEnvProxy. + + Parameters: None. + + Return Values: Pointer to UIEnvProxy. + + Errors/Exceptions: None. + + Status: Draft + +------------------------------------------------------------------------------- +*/ +CUiEnvProxy* CTestThreadContainerRunnerFactory::GetUiEnvProxy() + { + return iUiEnvProxy; + } + +// End of File