diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmserver/Server/Source/ASSrvServerWideData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/alarmserver/Server/Source/ASSrvServerWideData.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,296 @@ +// Copyright (c) 1999-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 "ASSrvServerWideData.h" + +// User Includes +#include "ASSrvTimer.h" +#include "ASSrvSession.h" +#include "ASSrvDataPool.h" +#include "ASSrvAlarmQueue.h" +#include "ASSrvAlarmStore.h" +#include "ASSrvStaticUtils.h" +#include "ASSrvSessionEngine.h" +#include "ASSrvSoundSettings.h" +#include "ASSrvSoundController.h" +#include "ASSrvAnyEventObserver.h" +#include "ASSrvNotificationCoordinator.h" +#include "ASSrvEnvironmentChangeManager.h" + +#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT + #include "assrvsystemstate.h" +#endif + +CASSrvServerWideData::CASSrvServerWideData() : iCachedUtcOffset(0) +#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT +, iServerIsReadOnly(EFalse) +#endif + { + } + +CASSrvServerWideData::~CASSrvServerWideData() + { +#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT + delete iASSrvSystemState; +#endif + delete iStore; + delete iSoundCountroller; + delete iNotificationCoordinator; + delete iDataPool; + delete iSoundSettings; + delete iTimer; + delete iQueue; + delete iEnvironmentChangeManager; + + iAnyEventObservers.Close(); + iActiveSessions.Close(); + + iFsSession.Close(); + } + +void CASSrvServerWideData::ConstructL() + { + User::LeaveIfError(iFsSession.Connect()); + + // NOTE: The construction order ***IS IMPORTANT*** + iEnvironmentChangeManager = CASSrvEnvironmentChangeManager::NewL(*this); + iQueue = CASSrvAlarmQueue::NewL(*this); + iTimer = CASSrvAlarmTimer::NewL(*this); + iSoundSettings = CASSrvSoundSettings::NewL(*this); + iDataPool = CASSrvDataPool::NewL(*this); + iNotificationCoordinator = CASSrvNotificationCoordinator::NewL(*this); + iSoundCountroller = CASSrvSoundController::NewL(*this, *iNotificationCoordinator); + iStore = CASSrvAlarmStore::NewL(*this); +#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT + iASSrvSystemState = CASSrvSystemState::NewL(); + iASSrvSystemState->RequestNotificationL(*iStore); + iASSrvSystemState->RequestNotificationL(*this); +#endif + } + +CASSrvServerWideData* CASSrvServerWideData::NewL() + { + CASSrvServerWideData* self = new(ELeave) CASSrvServerWideData(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT +void CASSrvServerWideData::MHandleSystemStateChange(TState aState) + { + switch (aState) + { + case EShutdown: + { + iServerIsReadOnly = ETrue; + break; + } + case ENormal: + { + iServerIsReadOnly = EFalse; + break; + } + default: + break; + } + } + +TBool CASSrvServerWideData::ServerIsReadOnly() + { + return iServerIsReadOnly; + } +#endif + +/** + * Access the file server session + */ +RFs& CASSrvServerWideData::FsSession() const + { + return const_cast(this)->iFsSession; + } + +/** + * Access the sound settings + */ +CASSrvSoundSettings& CASSrvServerWideData::SoundSettings() const + { + return *iSoundSettings; + } + +/** + * Access the alarm queue + */ +CASSrvAlarmQueue& CASSrvServerWideData::Queue() const + { + return *iQueue; + } + +/** + * Access the sound controller + */ +CASSrvSoundController& CASSrvServerWideData::SoundController() const + { + return *iSoundCountroller; + } + +/** + * Access the data pool + */ +CASSrvDataPool& CASSrvServerWideData::DataPool() const + { + return *iDataPool; + } + +/** + * Access the timer + */ +CASSrvAlarmTimer& CASSrvServerWideData::Timer() const + { + return *iTimer; + } + +/** + * Access the "any event manager" + */ +MASSrvAnyEventManager& CASSrvServerWideData::AnyEventManager() const + { + return *const_cast(this); + } + +/** + * Access the environment change manager + */ +CASSrvEnvironmentChangeManager& CASSrvServerWideData::EnvironmentChangeManager() const + { + return *iEnvironmentChangeManager; + } + +/** + * Access the notification co-ordinator + */ +CASSrvNotificationCoordinator& CASSrvServerWideData::NotificationCoordinator() const + { + return *iNotificationCoordinator; + } + +/** + * Access the session collection + */ +MASSrvSessionCollection& CASSrvServerWideData::SessionCollection() const + { + return *const_cast(this); + } + +/** + * @see MASSrvAnyEventManager + */ +void CASSrvServerWideData::MASAnyEventManagerObserverAddL(MASSrvAnyEventObserver& aObserver) + { + User::LeaveIfError(iAnyEventObservers.InsertInAddressOrder(&aObserver)); + } + +/** + * @see MASSrvAnyEventManager + */ +void CASSrvServerWideData::MASAnyEventManagerObserverRemove(const MASSrvAnyEventObserver& aObserver) + { + TInt index = KErrNotFound; + const TInt error = iAnyEventObservers.FindInAddressOrder(&aObserver, index); + if (error != KErrNotFound) + { + iAnyEventObservers.Remove(index); + } + } + +/** + * @see MASSrvAnyEventManager + */ +void CASSrvServerWideData::MASAnyEventManagerObserverNotifyChanges(TAlarmChangeEvent aEvent, TAlarmId aAlarmId) + { + const TInt count = iAnyEventObservers.Count(); + for(TInt i=0; iMASSrvAnyEventHandleChange(aEvent, aAlarmId); + } + } + +/** + * @see MASSrvSessionCollection + */ +TASSrvSessionId CASSrvServerWideData::MASSessionCollectionAttachL(const MASSrvSession& aSession) + { + // Add to collection + User::LeaveIfError(iActiveSessions.InsertInAddressOrder(&aSession)); + + // Generate Id + if (++iNextFreeSessionId == KMaxTInt) + { + iNextFreeSessionId = 0; + } + + return iNextFreeSessionId; + } + +/** + * @see MASSrvSessionCollection + */ +void CASSrvServerWideData::MASSessionCollectionDetach(const MASSrvSession& aSession) + { + TInt index = KErrNotFound; + const TInt error = iActiveSessions.FindInAddressOrder(&aSession, index); + if (error != KErrNotFound) + { + iActiveSessions.Remove(index); + } + + // Remove any session alarms for this session + Queue().RemoveAllSessionAlarmsBySessionId(aSession.MASSrvSessionId()); + } + +/** + * @see MASSrvSessionCollection + */ +TInt CASSrvServerWideData::MASSessionCollectionAlarmOwner(TAlarmId aAlarmId, TDes& aFullName) const + { + // If the alarm doesn't have an originating session id then we can't return the owning session name. + const TASSrvAlarm* alarm = Queue().QueueAlarmById(aAlarmId); + if (!alarm) + { + // If the alarm doesn't exist then we can't return the owning session + return KErrNotFound; + } + if (alarm->OriginatingSessionId() == KNullSessionId) + { + return KErrNotFound; + } + + // If the originating session is no longer connected then we can't return the session name. + const TInt count = iActiveSessions.Count(); + for(TInt i=0; iOriginatingSessionId()) + { + // Get the session name + session.MASSrvSessionFullName(aFullName); + return KErrNone; + } + } + return KErrNotFound; + }