diff -r e8c1ea2c6496 -r 8758140453c0 lbs/common/src/ctlbsposclientholder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lbs/common/src/ctlbsposclientholder.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,224 @@ +// Copyright (c) 2000-2009 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 "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +// INCLUDES +#include "ctlbsposclientholder.h" +#include "ctlbsposclient.h" + +// CONSTANTS + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CT_LbsPosClientHolder::CT_LbsPosClientHolder() +: CActive(EPriorityHigh), iRequestsActive(EFalse), iCancelTime(0) + { + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::ConstructL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::ConstructL(TInt aRequestCount, TUid aPsy, TBool aSameServer) + { + User::LeaveIfError(iTimer.CreateLocal()); + CActiveScheduler::Add(this); + User::LeaveIfError(iPosServer.Connect()); + CT_LbsPosClient* requester = NULL; + for (TInt i = 0; i < aRequestCount; i++) + { + if (aSameServer) + { + requester = CT_LbsPosClient::NewL(this, aPsy,iPosServer); + } + else + { + requester = CT_LbsPosClient::NewL(this, aPsy); + } + CleanupStack::PushL(requester); + User::LeaveIfError(iRequesters.Append(requester)); + CleanupStack::Pop(requester); + } + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::NewLC +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +CT_LbsPosClientHolder* CT_LbsPosClientHolder::NewLC(TInt aRequestCount, TUid aPsy, TBool aSameServer) + { + CT_LbsPosClientHolder* self = new (ELeave) CT_LbsPosClientHolder; + CleanupStack::PushL(self); + self->ConstructL(aRequestCount, aPsy, aSameServer); + return self; + } + + + +// Destructor +CT_LbsPosClientHolder::~CT_LbsPosClientHolder() + { + Cancel(); + iTimer.Close(); + iRequesters.ResetAndDestroy(); + iRequesters.Close(); + iRequestersWhoWillCancel.Close(); + iPosServer.Close(); + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::MakeRequests +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::MakeRequests() + { + if (iRequestsActive) + { + return; + } + iRequestsActive = ETrue; + TInt requesterCount = iRequesters.Count(); + iNofRequestsDone = 0; + for (TInt i = 0; i < requesterCount; i++) + { + iRequesters[i]->MakeRequest(); + } + + // initiate cancelling if this is set. + if (iRequestersWhoWillCancel.Count() > 0) + { + iTimer.After(iStatus, iCancelTime); + SetActive(); + } + + CActiveScheduler::Start(); + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::HandleRequestDone +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::HandleRequestDone() + { + iNofRequestsDone++; + if (iNofRequestsDone == iRequesters.Count()) + { + iRequestsActive = EFalse; + CActiveScheduler::Stop(); + } + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::RunL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::RunL() + { + // Cancel certain requests. + TInt nofRequestersWhoWillCancel = iRequestersWhoWillCancel.Count(); + for (TInt i = 0; i < nofRequestersWhoWillCancel; i++) + { + iRequesters[iRequestersWhoWillCancel[i]]->Cancel(); + HandleRequestDone(); + } + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::DoCancel +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::DoCancel() + { + iTimer.Cancel(); + } + +void CT_LbsPosClientHolder::StopRequests() + { + if (!iRequestsActive) + { + return; + } + Cancel(); + TInt requesterCount = iRequesters.Count(); + for (TInt i = 0; i < requesterCount; i++) + { + iRequesters[i]->Cancel(); + } + CActiveScheduler::Stop(); + iRequestsActive = EFalse; + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::GetResult +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::GetResult( + TInt& aStatus, + TPositionInfo& aModuleInfo, + TTimeIntervalMicroSeconds& aRequestTime, + TInt aRequesterIndex) + { + iRequesters[aRequesterIndex]->GetResult(aStatus, aModuleInfo, aRequestTime); + } + + + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::SetRequesterWillCancelL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::SetCancelTime(TTimeIntervalMicroSeconds32 aTimeInterval) + { + iCancelTime = aTimeInterval; + } + +// --------------------------------------------------------- +// CT_LbsPosClientHolder::SetRequesterWillCancelL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsPosClientHolder::SetRequesterWillCancelL(TInt aIndex) + { + TInt length = iRequestersWhoWillCancel.Count(); + for (TInt i = 0; i < length; i++) + { + if (iRequestersWhoWillCancel[i] == aIndex) return; + } + User::LeaveIfError(iRequestersWhoWillCancel.Append(aIndex)); + } + + +// End of File