diff -r 989d2f495d90 -r fc9cf246af83 serviceproviders/sapi_mediamanagement/mediamanagementservice/src/asynchrequestmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_mediamanagement/mediamanagementservice/src/asynchrequestmanager.cpp Thu Aug 27 07:43:07 2009 +0300 @@ -0,0 +1,131 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: ?Description +* +*/ + + +#include +#include + +#include "asynchrequestmanager.h" +#include "mgclfoperationobserver.h" + +// ----------------------------------------------------------------------------- +// CCAsynchRequestManager ::NewLC +// Returns the instance of CCAsynchRequestManager class. +// ----------------------------------------------------------------------------- +CAsynchRequestManager * CAsynchRequestManager ::NewL() + { + CAsynchRequestManager * self = new ( ELeave )CAsynchRequestManager (); + return self; + } + + +// ----------------------------------------------------------------------------- +// CCAsynchRequestManager ::~CCAsynchRequestManager +// Destructor +// ----------------------------------------------------------------------------- + +CAsynchRequestManager ::~CAsynchRequestManager () + { + + //Cancel All pending request + + TInt pos = iAsyncObjArray.Count() - 1; + TAsyncRequestInfo obj; + for ( ; pos >= 0; pos-- ) + { + obj = iAsyncObjArray[pos]; + //No need to inform for this cancel + + obj.iAsyncObj->CancelL(); + delete obj.iAsyncObj; + } + iAsyncObjArray.Close(); + + } + + + +// ----------------------------------------------------------------------------- +// CCAsynchRequestManager ::Cancel +// Cancel the pending asynchronous request +// ----------------------------------------------------------------------------- +TInt CAsynchRequestManager ::Cancel( TInt32 aTransactionID ) + { + + TInt pos = iAsyncObjArray.Count() - 1; + TAsyncRequestInfo obj; + for ( ; pos >= 0; pos-- ) + { + obj = iAsyncObjArray[pos]; + if( obj.iTransactionId == aTransactionID ) + { + obj.iAsyncObj->CancelL(); + delete obj.iAsyncObj; + return KErrNone; + } + } + return KErrNotFound; + + } + + +// ----------------------------------------------------------------------------- +// CCAsynchRequestManager ::RequestComplete +// This is called by the observer when asynch request complete +// ----------------------------------------------------------------------------- +void CAsynchRequestManager ::RequestComplete( TInt32 aTransactionID ) + + { + TInt pos = iAsyncObjArray.Count()-1; + TAsyncRequestInfo obj; + for ( ; pos >= 0; pos-- ) + { + obj = iAsyncObjArray[pos]; + if( obj.iTransactionId == aTransactionID ) + { + iAsyncObjArray.Remove(pos); + iAsyncObjArray.Compress(); + return; + } + } + } + +// ----------------------------------------------------------------------------- +// CAsynchRequestManager ::AddObserverL +// AddObserever +// ----------------------------------------------------------------------------- +void CAsynchRequestManager ::AddObserverL(CClfOperationObserver* aServiceObserver, TUint aTransactionID) + + { + // Add the given observer in array and return the laucher observer + // strutcure for binding the transaction ID and callback object + + TAsyncRequestInfo asyncRequestInfo; + asyncRequestInfo.iTransactionId = aTransactionID; + + //observer for observering underlying classes + asyncRequestInfo.iAsyncObj = aServiceObserver; + + User::LeaveIfError( iAsyncObjArray.Append( asyncRequestInfo ) ); + + } + + + + + +