diff -r 000000000000 -r e686773b3f54 presencecache/presencecacheserver2/src/presencecacheexpiry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presencecache/presencecacheserver2/src/presencecacheexpiry.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,117 @@ +/* +* 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: +* +*/ + +// INCLUDE FILES +#include "presencecacheexpiry.h" +#include "presencecachebuddystore.h" +#include "presencecacheserver.h" +#include "presencecachesession.h" +#include "mpresencebuddyinfo2.h" +#include "presencecacheservicestore.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPresenceCacheExpiry::CPresenceCacheExpiry +// ----------------------------------------------------------------------------- +// +inline CPresenceCacheExpiry::CPresenceCacheExpiry( + CPresenceCacheServer& aServer ) +: iAsyncCallBack( TCallBack( CPresenceCacheExpiry::ExpiryCheck, this ), + CActive::EPriorityIdle), + iServer( aServer ) + { + } + +// ----------------------------------------------------------------------------- +// CPresenceCacheExpiry::NewL +// ----------------------------------------------------------------------------- +// +CPresenceCacheExpiry* CPresenceCacheExpiry::NewL( + CPresenceCacheServer& aServer ) + { + return new( ELeave ) CPresenceCacheExpiry(aServer); + } + + +// Destructor +CPresenceCacheExpiry::~CPresenceCacheExpiry() + { + iAsyncCallBack.Cancel(); + } + +// ----------------------------------------------------------------------------- +// CPresenceCacheExpiry::ExpiryCheck +// ----------------------------------------------------------------------------- +// +TInt CPresenceCacheExpiry::ExpiryCheck(TAny *aPtr) + { + CPresenceCacheExpiry* self = static_cast(aPtr); + TRAP_IGNORE(self->DoExpiryCheckL()); + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CPresenceCacheExpiry::NotifySubscribersL +// ----------------------------------------------------------------------------- +// +void CPresenceCacheExpiry::NotifySubscribersL( + CPresenceCacheBuddyStore& aBuddyStore ) + { + RPointerArray sessions = + aBuddyStore.GetSubscribedSessions(); + const TInt sessionCount( sessions.Count() ); + MPresenceBuddyInfo2* buddyInfoTemp = MPresenceBuddyInfo2::NewLC(); + buddyInfoTemp->SetIdentityL( aBuddyStore.BuddyId() ); + + for( TInt i = 0 ; i < sessionCount ; ++i ) + { + CPresenceCacheSession* session = sessions[i]; + if (iServer.SessionExists(session)) + { + session->NotifyPresenceChangeL( buddyInfoTemp ); + } + } + CleanupStack::PopAndDestroy(); // buddyInfoTemp + } + +// ----------------------------------------------------------------------------- +// CPresenceCacheExpiry::DoExpiryCheckL +// ----------------------------------------------------------------------------- +// +void CPresenceCacheExpiry::DoExpiryCheckL() + { + RPointerArray& presenceCache = + iServer.iPresenceCache; + + RPointerArray buddyStores; + + const TInt serviceCount(presenceCache.Count()); + for( TInt i = 0 ; i < serviceCount ; ++i ) + { + presenceCache[i]->RemoveExpiredBuddyInfos( buddyStores ); + } + + const TInt buddyStoreCount( buddyStores.Count() ); + for( TInt i = 0 ; i < buddyStoreCount ; ++i ) + { + NotifySubscribersL( *( buddyStores[i] ) ); + } + } + +// End of File