--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/TestServer/src/TestThreadContainerRunnerFactory.cpp Tue Feb 02 01:57:15 2010 +0200
@@ -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 <stifinternal/TestThreadContainerRunnerFactory.h>
+#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