diff -r 000000000000 -r 522cd55cc3d7 locationcentre/lcservice/src/lcnotificationao.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationcentre/lcservice/src/lcnotificationao.cpp Tue Feb 02 00:16:03 2010 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2007 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: Location Centre Notification Active Object. +* +*/ + + +// SYSTEM INCLUDES + +// USER INCLUDES +#include "lcnotificationao.h" +#include "lcnotification.h" +#include "lcclientsession.h" + +// CONSTANT DEFINTIONS + +// ----- Member funtions for CLcNotificationAO --------------------------------- + +// --------------------------------------------------------------------------- +// CLcNotificationAO::CLcNotificationAO +// --------------------------------------------------------------------------- +// +CLcNotificationAO::CLcNotificationAO( MLcNotification& aObserver, + RLcClientSession& aClientSession ) + :CActive( EPriorityStandard ), + iObserver( aObserver ), + iClientSession( aClientSession ) + { + // C++ Default constructor. No allocations or functions which can Leave + // should be called from here. + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// CLcNotificationAO::~CLcNotificationAO +// --------------------------------------------------------------------------- +// +CLcNotificationAO::~CLcNotificationAO() + { + // C++ Destructor. Free all resources associated with this class. + Cancel(); + } + +// --------------------------------------------------------------------------- +// CLcNotificationAO* CLcNotificationAO::NewL +// --------------------------------------------------------------------------- +// +CLcNotificationAO* CLcNotificationAO::NewL( MLcNotification& aObserver, + RLcClientSession& aClientSession ) + { + CLcNotificationAO* self = new ( ELeave )CLcNotificationAO( aObserver, + aClientSession ); + return self; + } + +// --------------------------------------------------------------------------- +// void CLcNotificationAO::IssueRequest +// --------------------------------------------------------------------------- +// +void CLcNotificationAO::IssueRequest() + { + // The request is issued only if there is no outstanding request. If there + // any request outstanding then don't do anything. Server the previous + // request. + if ( !IsActive()) + { + // Location Centre Server is the ASP. Send a notification request to + // the same. + iClientSession.SendReceive( ERegisterObserver, iStatus ); + SetActive(); + } + } + +// --------------------------------------------------------------------------- +// void CLcNotificationAO::CancelRequest +// --------------------------------------------------------------------------- +// +void CLcNotificationAO::CancelRequest() + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// void CLcNotificationAO::RunL +// --------------------------------------------------------------------------- +// +void CLcNotificationAO::RunL() + { + // Communicate the Success/Failure of the Notification request to the + // Location Centre Client. + iObserver.LcStatusChangedL( iStatus.Int()); + + // Issue the Observer request unless the server has been terminated. + if ( iStatus.Int() != KErrServerTerminated ) + { + IssueRequest(); + } + } + +// --------------------------------------------------------------------------- +// void CLcNotificationAO::DeCancel +// --------------------------------------------------------------------------- +// +void CLcNotificationAO::DoCancel() + { + iClientSession.SendReceive( ERemoveObserver ); + } + +// End of File