diff -r 1e962b12a8db -r d2f833ab7940 activityfw/activitydatabase/hsactivitydbserver/src/afsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activitydatabase/hsactivitydbserver/src/afsession.cpp Fri Jun 11 16:13:51 2010 +0300 @@ -0,0 +1,177 @@ +/* +* 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 "afsession.h" +#include "aftask.h" +#include "activitycmd.h" + +#include "afstorageasynctask.h" +#include "afstoragesynctask.h" +#include "afobservertask.h" +#include "afbroadcasttask.h" +#include "afdataprovidertask.h" +#include "afthumbnailtask.h" + +_LIT(KTaskAlreadyExists, "Activity task exists"); + +// ----------------------------------------------------------------------------- +/** + * Constructor for performing 1st stage construction + * @param fileSession - initialized file system session + * @param taskStorage - global observers storage + * @param storage - data storage + */ + +CAfSession::CAfSession(RFs& fileSession, + MAfTaskStorage& taskStorage, + CAfStorage& storage) +: +mFileSession(fileSession), +mTasksStorage(taskStorage), +mStorage(storage) +{ + // No implementation required +} + +// ----------------------------------------------------------------------------- +/** + * Destructor. + */ +CAfSession::~CAfSession() +{ + RemoveNotValidTasks(this); + mTasksStorage.RemoveNotValidTasks(this); +} + +// ----------------------------------------------------------------------------- +/** + * Two-phased constructor. + * @param fileSession - initialized file system session + * @param taskStorage - global observers storage + * @param storage - data storage + */ +CAfSession* CAfSession::NewL(RFs& fileSession, + MAfTaskStorage& taskStorage, + CAfStorage& storage) +{ + CAfSession* self = new (ELeave) CAfSession(fileSession, + taskStorage, + storage); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +/** + * EPOC default constructor for performing 2nd stage construction + */ +void CAfSession::ConstructL() +{ +} + +// ----------------------------------------------------------------------------- +/** + * Implements interface + * @see void CSession2::ServiceL(const RMessage2&) + */ +void CAfSession::ServiceL(const RMessage2& message) +{ + switch (message.Function()) { + case AddActivity: + case UpdateActivity: + case RemoveActivity: + case RemoveApplicationActivities: + AfStorageSyncTask::ExecuteL(mTasksStorage, mStorage, message); + break; + + case ApplicationActivity: + case Activities: + case ApplicationActivities: + CAfStorageAsyncTask::ExecuteLD(*this, mStorage, message); + break; + + case WaitActivity: + case NotifyChange: + CAfObserverTask::ExecuteLD(mTasksStorage, *this, message); + break; + + case GetThumbnail: + CAfThumbnailTask::ExecuteLD(*this, message); + break; + + case LaunchActivity: + case CancelWait: + case CancelNotify: + AfBroadcastTask::ExecuteL(mTasksStorage, message); + break; + + case GetData: + AfDataProviderTask::ExecuteL(*this,message); + break; + + default: + message.Complete(CServer2::EBadMessageNumber); + break; + } +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MAfTaskStorage::PushL(CAfTask *) + */ +void CAfSession::PushL(CAfTask * task) +{ + (KErrNotFound == mRunningTasks.Find(task)) ? + mRunningTasks.AppendL(task) : + User::Panic(KTaskAlreadyExists, KErrAlreadyExists); +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MAfTaskStorage::Pop(CAfTask *) + */ +void CAfSession::Pop(CAfTask *task) +{ + const TInt offset(mRunningTasks.Find(task)); + if (KErrNotFound != offset) { + mRunningTasks.Remove(offset); + } +} + +// ----------------------------------------------------------------------------- +/** + * Interface implementation + * @see MAfTaskStorage::StorageData() + */ +const RPointerArray& CAfSession::StorageData() const +{ + return mRunningTasks; +} + +// ----------------------------------------------------------------------------- +/** + * Removes not valid task + */ +void CAfSession::RemoveNotValidTasks(const CSession2* session) +{ + if (session == this) { + mRunningTasks.ResetAndDestroy(); + } +}