diff -r 000000000000 -r ff3b6d0fd310 satengine/SatServer/Engine/src/csatsactivewrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/satengine/SatServer/Engine/src/csatsactivewrapper.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,205 @@ +/* +* Copyright (c) 2002-2008 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: Active object wrapper for SAT Server +* +*/ + + +#include "csatsactivewrapper.h" +#include "SatLog.h" + +const TInt KShortWait = 200; // 200 microseconds +const TInt KWaitTimes = 5; // Number of retries + +// ================= MEMBER FUNCTIONS ========================================== + +// Class constructor. +CSatSActiveWrapper::CSatSActiveWrapper() : + CActive( EPriorityStandard ) + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::CSatSActiveWrapper \ + calling-exiting" ) + CActiveScheduler::Add( this ); + } + +// Destructor +CSatSActiveWrapper::~CSatSActiveWrapper() + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::~CSatSActiveWrapper calling" ) + + if ( iTimer ) + { + iTimer->Cancel(); + delete iTimer; + } + + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::~CSatSActiveWrapper exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::RequestStatus +// ----------------------------------------------------------------------------- +// +TRequestStatus& CSatSActiveWrapper::RequestStatus() + { + LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RequestStatus calling" ) + + TInt retries( 0 ); + while ( IsActive() && ( retries++ < KWaitTimes ) ) + { + // If this wrapper is already active, wait little bit + After( KShortWait ); + } + LOG2( DETAILED, "SATENGINE: CSatSActiveWrapper::RequestStatus retries: %d", + retries ) + // Double check. If still active, cancel + if ( IsActive() ) + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::RequestStatus active" ) + CancelWrapper(); + } + + LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RequestStatus exiting" ) + return iStatus; + } +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::SetActiveAndWait +// ----------------------------------------------------------------------------- +// +TInt CSatSActiveWrapper::SetActiveAndWait() + { + LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::SetActiveAndWait calling" ) + + TInt returnValue( KErrInUse ); + if ( !IsActive() && !iWait.IsStarted() ) + { + LOG( DETAILED, + "SATENGINE: CSatSActiveWrapper::SetActiveAndWait setActiveAndWait" ) + SetActive(); + iWait.Start(); // Blocks until request is complete or cancelled + returnValue = iStatus.Int(); + } + + LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::SetActiveAndWait exiting" ) + return returnValue; + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::After +// ----------------------------------------------------------------------------- +void CSatSActiveWrapper::After( + const TTimeIntervalMicroSeconds32& aDelay, + const TTimeIntervalMicroSeconds32& aInterval ) + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::After calling" ) + + if ( !iAfterWait.IsStarted() ) + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::After start iAfterWait" ) + TRAP_IGNORE( ( iTimer = CPeriodic::NewL( EPriorityStandard ) ) ) + iTimer->Start( aDelay, aInterval, TCallBack( DelayCallBack, this ) ); + iAfterWait.Start(); + + delete iTimer; + iTimer = NULL; + } + + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::After exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::DelayCallBack +// Timer call back function +// ----------------------------------------------------------------------------- +TInt CSatSActiveWrapper::DelayCallBack( TAny* aPtr ) + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::DelayCallBack calling" ) + CSatSActiveWrapper* ptrThis = static_cast( aPtr ); + if ( ptrThis && ( ptrThis->iAfterWait.IsStarted() ) ) + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::DelayCallBack stop \ + iAfterWait" ) + ptrThis->iAfterWait.AsyncStop(); + } + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::DelayCallBack exiting" ) + return ( EFalse ); + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::AddSubSessionL +// ----------------------------------------------------------------------------- +void CSatSActiveWrapper::CancelWrapper() + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::CancelWrapper calling" ) + + // If pending for request, cancel active + if ( IsActive() ) + { + LOG( SIMPLE, + "SATENGINE: CSatSActiveWrapper::CancelWrapper cancel iWait" ) + // Calls DoCancel which cancels iWait + Cancel(); + } + else if ( iAfterWait.IsStarted() ) + { + LOG( SIMPLE, + "SATENGINE: CSatSActiveWrapper::CancelWrapper cancel timer" ) + // Cancels timer + iAfterWait.AsyncStop(); + } + else + { + LOG( SIMPLE, + "SATENGINE: CSatSActiveWrapper::CancelWrapper Wrapper not active" ) + } + + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::CancelWrapper exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::Release +// ----------------------------------------------------------------------------- +void CSatSActiveWrapper::Release() + { + LOG( SIMPLE, "SATENGINE: CSatSActiveWrapper::Release calling-exiting" ) + delete this; + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::RunL +// Synchronous request complete +// ----------------------------------------------------------------------------- +// +void CSatSActiveWrapper::RunL() + { + LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RunL calling" ) + + iWait.AsyncStop(); + + LOG( DETAILED, "SATENGINE: CSatSActiveWrapper::RunL exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatSActiveWrapper::DoCancel +// Synchronous request complete +// ----------------------------------------------------------------------------- +// +void CSatSActiveWrapper::DoCancel() + { + LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DoCancel calling" ) + + iWait.AsyncStop(); + + LOG( SIMPLE, "SATENGINE: CSatBIPUtils::DoCancel exiting" ) + }