presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheexpiry.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 11 Jun 2010 13:29:23 +0300
changeset 40 b46a585f6909
child 81 640d30f4fb64
permissions -rw-r--r--
Revision: 201021 Kit: 2010123

/*
* 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<CPresenceCacheExpiry*>(aPtr);
    TRAP_IGNORE(self->DoExpiryCheckL());
    return EFalse;
    }

// -----------------------------------------------------------------------------
// CPresenceCacheExpiry::NotifySubscribersL
// -----------------------------------------------------------------------------
//
void CPresenceCacheExpiry::NotifySubscribersL( 
        CPresenceCacheBuddyStore& aBuddyStore )
    {
    RPointerArray<CPresenceCacheSession> 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<CPresenceCacheServiceStore>& presenceCache = 
            iServer.iPresenceCache;
    
    RPointerArray<CPresenceCacheBuddyStore> 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