diff -r 0818dd463d41 -r 924385140d98 startupservices/Startup/syserrcmd/tsrc/syserrcmdtest/inc/asyncrequesthandler.h --- a/startupservices/Startup/syserrcmd/tsrc/syserrcmdtest/inc/asyncrequesthandler.h Thu Aug 19 10:05:08 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* - * 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: - * - */ - -#ifndef ASYNCREQUESTHANDLER_H -#define ASYNCREQUESTHANDLER_H - -// SYSTEM INCLUDE FILES -#include - -// DATA TYPES -_LIT( KPanicCat, "ASYNCREQUESTHANDLER" ); - -/** Panic codes */ -enum TArhPanicCodes - { - EArhNone, - EArhRequestPending - }; - -// CLASS DECLARATION - -/** - * A template class for handling asynchronous requests. - * - * @lib None. - * @since S60 TB9.2 - */ -template -NONSHARABLE_CLASS( CAsyncRequestHandler ): public CActive - { -public: - - // TYPE DEFINTIONS - - /** HandleIssueRequest callback */ - typedef void ( T::*HandleIssueRequest )( TRequestStatus& ); - - /** HandleRunL callback */ - typedef void ( T::*HandleRunL )( TInt ); - - /** HandleRunError callback */ - typedef TInt ( T::*HandleRunError )( TInt ); - - /** HandleDoCancel callback */ - typedef void ( T::*HandleDoCancel )(); - - // DATA TYPES - - /** Request type */ - enum TAsyncRequestType - { - ERequestOneShot, - ERequestContinuous - }; - -public: - - /** - * Symbian two phased constructor. - * - * @since S60 TB9.2 - * @param None. - * @return CAsyncRequestHandler* - */ - static CAsyncRequestHandler* NewL( T& aPtr, - HandleIssueRequest aHandleIssueRequest, - HandleRunL aHandleRunL, - HandleRunError aHandleRunError, - HandleDoCancel aHandleDoCancel, - TAsyncRequestType aType = ERequestContinuous ) - { - CAsyncRequestHandler* self = CAsyncRequestHandler::NewLC( aPtr, - aHandleIssueRequest, - aHandleRunL, - aHandleRunError, - aHandleDoCancel, - aType ); - CleanupStack::Pop( self ); - return self; - } - - /** - * Symbian two phased constructor. - * Instance is left in the cleanup stack. - * - * @since S60 TB9.2 - * @param None. - * @return CAsyncRequestHandler* - */ - static CAsyncRequestHandler* NewLC( T& aPtr, - HandleIssueRequest aHandleIssueRequest, - HandleRunL aHandleRunL, - HandleRunError aHandleRunError, - HandleDoCancel aHandleDoCancel, - TAsyncRequestType aType = ERequestContinuous ) - { - CAsyncRequestHandler* self = new CAsyncRequestHandler( aPtr, - aHandleIssueRequest, - aHandleRunL, - aHandleRunError, - aHandleDoCancel, - aType ); - CleanupStack::PushL( self ); - return self; - } - - /** - * C++ destructor. - */ - virtual ~CAsyncRequestHandler() - { - Cancel(); - } - -public: // New methods - - /** - * Issues a new request. - * Panic will occur if there already is a request pending. - * - * @since TB9.2 - * @param None. - * @return None. - */ - void IssueRequest() - { - __ASSERT_DEBUG( !IsActive(), - User::Panic( KPanicCat, EArhRequestPending ) ); - - // Call the HandleIssueRequest from the template class and set active - ( iPtr.*iHandleIssueRequest )( iStatus ); - SetActive(); - } - -protected: // From base classes - - // @see CActive - void RunL() - { - // Check result and issue request again - TInt status = iStatus.Int(); - if( iType == ERequestContinuous ) - { - IssueRequest(); - } - - // Call the HandleRunL from the template class - ( iPtr.*iHandleRunL )( status ); - } - - // @see CActive - TInt RunError( TInt aError ) - { - // Call the HandleRunError from the template class - TInt err = ( iPtr.*iHandleRunError )( aError ); - return err; - } - - // @see CActive - void DoCancel() - { - // Call the HandleDoCancel from the template class - ( iPtr.*iHandleDoCancel )(); - } - -private: - - CAsyncRequestHandler( T& aPtr, - HandleIssueRequest aHandleIssueRequest, - HandleRunL aHandleRunL, - HandleRunError aHandleRunError, - HandleDoCancel aHandleDoCancel, - TAsyncRequestType aType = ERequestContinuous ): - CActive( CActive::EPriorityStandard ), - iPtr( aPtr ), - iHandleIssueRequest( aHandleIssueRequest ), - iHandleRunL( aHandleRunL ), - iHandleRunError( aHandleRunError ), - iHandleDoCancel( aHandleDoCancel ), - iType( aType ) - { - CActiveScheduler::Add( this ); - } - -private: // Data - - /** Pointer to the template class */ - T& iPtr; - - /** HandleIssueRequest function pointer */ - HandleIssueRequest iHandleIssueRequest; - - /** HandleRunL function pointer */ - HandleRunL iHandleRunL; - - /** HandleRunError function pointer */ - HandleRunError iHandleRunError; - - /** HandleDoCancel function pointer */ - HandleDoCancel iHandleDoCancel; - - /** Request type */ - TAsyncRequestType iType; - }; - -#endif // ASYNCREQUESTHANDLER_H