stif/TestServer/src/TestThreadContainerRunnerFactory.cpp
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /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 <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