--- a/satengine/SatServer/Engine/src/TSatEventMediator.cpp Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*
-* Copyright (c) 2002-2007 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: Provides way to notify events and register observers
-* for events
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "TSatEventMediator.h"
-#include "TSatEventsObserver.h"
-//lint -e766 Used inside TRAP macro, lint misfunction.
-#include "EnginePanic.h"
-#include "MSatEventObserver.h"
-#include "SatLog.h"
-
-// FORWARD DECLARE
-class MSatEventObserver;
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::TSatEventMediator
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-TSatEventMediator::TSatEventMediator() :
- iEventsObservers(),
- iIsNotifying( EFalse ),
- iDeletionsMarked( EFalse )
- {
- LOG( SIMPLE,
- "SATENGINE: TSatEventMediator::TSatEventMediator calling - exiting" )
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::Reset
-// Replaces destructor since T classes cannot have one
-// -----------------------------------------------------------------------------
-//
-void TSatEventMediator::Reset()
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Reset calling" )
-
- iEventsObservers.ResetAndDestroy();
-
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Reset exiting" )
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::Notify
-// All observers, who are registered to get the notification of aEvent, are
-// notified
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void TSatEventMediator::Notify(
- TInt aEvent ) // Event
- {
- LOG( DETAILED, "SATENGINE: TSatEventMediator::Notify calling" )
-
- // Go through the list of observers and call notify for observers who are
- // observing aEvent.
-
- // Set the flag on. No one can remove observers when this flag is on
- iIsNotifying = ETrue;
-
- TInt count( iEventsObservers.Count() );
- LOG2( DETAILED, "SATENGINE: TSatEventMediator::Notify observers \
- count: %d", count )
- for ( TInt i = 0; i < count; i++ )
- {
- TSatEventsObserver* eventsObserver =
- iEventsObservers[i];
- __ASSERT_ALWAYS( eventsObserver,
- PanicSatEngine( ESatEngineNullPointer ) );
-
- if ( eventsObserver->ObservingEvent( aEvent ) )
- {
- MSatEventObserver* observer =
- eventsObserver->Observer();
-
- if ( observer )
- {
- LOG( DETAILED, "TSatEventMediator::Notify observer found" )
- // Observer found, notify it
- observer->Event( aEvent );
-
- // Check is iEventObservers list changed. Some observers might
- // remove themselves and notify a new event (new Notify loop)
- // and marked observers are deleted there. When it comes back
- // here iEventsObserver has changed
- if ( count > iEventsObservers.Count() )
- {
- LOG( DETAILED, "TSatEventMediator::Notify \
- count > iEventsObservers.Count()" )
- TInt newCount( iEventsObservers.Count() );
- i = i - ( count - newCount );
- count = newCount;
- }
- }
- else
- {
- LOG( DETAILED, "TSatEventMediator::Notify observer not found" )
- // Found NULL observer -> Mark fo deleted. This is deleted after
- // this notification loop
- eventsObserver->RemoveEvent( aEvent );
- eventsObserver->MarkForDelete();
- }
- }
- }
-
- // Set the flag off. Now observers can be removed
- iIsNotifying = EFalse;
-
- // Check was there any deletions during notify loop
- if ( iDeletionsMarked )
- {
- LOG( DETAILED, "TSatEventMediator::Notify iDeletionsMarked true" )
- // Delete marked observers
- DeleteMarkedObservers();
- iDeletionsMarked = EFalse;
- }
-
- LOG( DETAILED, "SATENGINE: TSatEventMediator::Notify exiting" )
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::RegisterL
-// Registers observer for getting the event when event is notified using
-// Notify( TInt aEvent ).
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void TSatEventMediator::RegisterL(
- MSatEventObserver* aObserver, // Observer of aEvent.
- TInt aEvent ) // Event, which will be trigger of notification.
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL calling" )
-
- __ASSERT_ALWAYS( aObserver, PanicSatEngine( ESatEngineNullPointer ) );
- // Check if aObserver instance is already registered, so that we dont
- // create a new TSatEventsObserver entry in to the iEventsObserver list.
- TSatEventsObserver* eventsObserver = HasObserverInstance( aObserver );
-
- if ( NULL != eventsObserver )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL eventsObserver \
- not NULL" )
- // Add the event for the observer.
- eventsObserver->AddEventL( aEvent );
- }
- else
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL eventsObserver \
- NULL" )
- // Observer is registering for the first time.
- eventsObserver = new( ELeave )TSatEventsObserver( aObserver );
- CleanupStack::PushL( eventsObserver );
- eventsObserver->AddEventL( aEvent );
- User::LeaveIfError( iEventsObservers.Append( eventsObserver ) );
- CleanupStack::Pop( eventsObserver );
- }
-
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL exiting" )
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::Unregister
-// Removes aEvent from aObservers observable events.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void TSatEventMediator::Unregister(
- const MSatEventObserver* aObserver, // Observer of aEvent.
- TInt aEvent ) // Event, which the observer is observing.
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister calling" )
-
- // Check if observer is registered.
- TSatEventsObserver* eventsObserver = HasObserverInstance( aObserver );
- if ( NULL != eventsObserver )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL eventsObserver \
- not NULL" )
- eventsObserver->RemoveEvent( aEvent );
-
- // Remove the eventsObserver from the list if the observer has
- // no longer any events to observe.
- if ( 0 == eventsObserver->EventCount() )
- {
- // Prevent delete if we are notifying observers
- if ( !iIsNotifying )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
- iIsNotifying false" )
- const TInt index = iEventsObservers.Find( eventsObserver );
- // Does not destroy the object.
- iEventsObservers.Remove( index );
- iEventsObservers.GranularCompress();
- delete eventsObserver;
- }
- else
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
- iIsNotifying true" )
- // If we are notifying, mark this observer as deleted
- eventsObserver->MarkForDelete();
- iDeletionsMarked = ETrue;
- }
- }
- }
-
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister exiting" )
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::Unregister
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void TSatEventMediator::Unregister(
- const MSatEventObserver* aObserver ) // Observer of aEvent.
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister calling" )
-
- // Check if observer is registered.
- TSatEventsObserver* eventsObserver = HasObserverInstance( aObserver );
- if ( NULL != eventsObserver )
- {
- // Prevent delete if we are notifying observers
- if ( !iIsNotifying )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
- iIsNotifying false" )
- const TInt index = iEventsObservers.Find( eventsObserver );
- iEventsObservers.Remove( index ); // Does not destroy the object.
- iEventsObservers.GranularCompress();
- delete eventsObserver;
- }
- else
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
- iIsNotifying true" )
- // If we are notifying, mark this observer as deleted
- eventsObserver->MarkForDelete();
- iDeletionsMarked = ETrue;
- }
- }
-
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister exiting" )
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::HasObserverInstance
-// Checks if aObserver is already registered to this mediator and returns the
-// result.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TSatEventsObserver* TSatEventMediator::HasObserverInstance(
- const MSatEventObserver* aObserver ) const // Observer looked from the list.
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::HasObserverInstance calling" )
-
- // Go through the list until same observer instance is found or
- // all entries have been checked.
- TSatEventsObserver* foundEventsObserver = NULL;
- const TInt count( iEventsObservers.Count() );
- LOG2( NORMAL, "SATENGINE: TSatEventMediator::HasObserverInstance \
- observer count: %d", count )
- for ( TInt i = 0; ( i < count ) && ( !foundEventsObserver ); i++ )
- {
- TSatEventsObserver* eventsObserver = iEventsObservers[i];
- __ASSERT_ALWAYS( eventsObserver,
- PanicSatEngine( ESatEngineNullPointer ) );
-
- if ( aObserver == eventsObserver->Observer() )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::HasObserverInstance \
- aObserver == eventsObserver->Observer()" )
- foundEventsObserver = eventsObserver;
- }
- }
-
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::HasObserverInstance exiting" )
- return foundEventsObserver;
- }
-
-// -----------------------------------------------------------------------------
-// TSatEventMediator::DeleteMarkedObservers
-// Deletes all observers marked as deleted during Notify loop
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void TSatEventMediator::DeleteMarkedObservers()
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::DeleteMarkedObservers calling" )
-
- // Go through the list and delete all observers wich are
- // marked as deleted
- TInt count( iEventsObservers.Count() );
- LOG2( NORMAL, "SATENGINE: TSatEventMediator::DeleteMarkedObservers \
- observer count: %d", count )
- for ( TInt i = 0; i < count; i++ )
- {
- TSatEventsObserver* eventsObserver =
- iEventsObservers[i];
- if ( eventsObserver )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::DeleteMarkedObservers\
- eventsObserver true" )
- // Check is obserer marked and it has no events
- if ( eventsObserver->IsMarkedForDelete() &&
- ( 0 == eventsObserver->EventCount() ) )
- {
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::\
- DeleteMarkedObservers delete Observer" )
- iEventsObservers.Remove( i ); // Does not destroy the object.
- iEventsObservers.GranularCompress();
- delete eventsObserver;
-
- // Update count value. We just removed an object from list
- count = iEventsObservers.Count();
- i--;
- }
- }
- }
-
- LOG( SIMPLE, "SATENGINE: TSatEventMediator::DeleteMarkedObservers exiting" )
- }
-
-// End of File