activityfw/activitydatabase/hsactivitydbserver/src/activityserver.cpp
author hgs
Fri, 30 Apr 2010 15:22:08 +0300
changeset 93 82b66994846c
child 83 156f692b1687
permissions -rw-r--r--
201017

/*
* 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 "activityserver.h"
#include "activitysession.h"
#include "activitystorage.h"
#include "activitytask.h"

#include <fbs.h>

_LIT( KActivityServerName, "hsactivitydbserver" );
_LIT(KObserverAlreadyExists, "Observer task exists");

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CActivityServer::CActivityServer()
:
CServer2( EPriorityStandard )
{
    // No implementation required
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CActivityServer::~CActivityServer()
{
    delete mStorage;
    mFsSession.Close();
    mObservers.ResetAndDestroy();
    RFbsSession::Disconnect();
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CActivityServer* CActivityServer::NewLC()
{
    CActivityServer* self = new (ELeave) CActivityServer();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CActivityServer::ConstructL()
{
    StartL(KActivityServerName);
    User::LeaveIfError(mFsSession.Connect());
    User::LeaveIfError(RFbsSession::Connect(mFsSession));
    mStorage = CActivityStorage::NewL(mFsSession);
    mObservers.Array();
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
CSession2* CActivityServer::NewSessionL(const TVersion &, const RMessage2&) const
{
    return CActivitySession::NewL(const_cast<CActivityServer*>(this)->mFsSession, 
                                  *const_cast<CActivityServer*>(this), 
                                  *mStorage);
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CActivityServer::PushL(CActivityTask * task)
{
    (KErrNotFound == mObservers.Find(task)) ?
     mObservers.AppendL(task) :
     User::Panic(KObserverAlreadyExists, KErrAlreadyExists);
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
void CActivityServer::Pop(CActivityTask *task)
{
    const TInt offset(mObservers.Find(task));
    if (KErrNotFound != offset) {
        mObservers.Remove(offset);
    }
}

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
const RPointerArray<CActivityTask>& CActivityServer::StorageData() const
{
    return mObservers;
}