diff -r 5315654608de -r 08c6ee43b396 taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp Mon Jan 18 20:10:36 2010 +0200 @@ -0,0 +1,159 @@ +/* + * =========================================================================== + * Name : hgfswsession.cpp + * Part of : Huriganes / Fast Swap Server + * Description : session implementation + * Version : %version: sa1spcx1#8 % + * + * Copyright © 2008 Nokia Corporation. + * This material, including documentation and any related + * computer programs, is protected by copyright controlled by + * Nokia Corporation. All rights are reserved. Copying, + * including reproducing, storing, adapting or translating, any + * or all of this material requires the prior written consent of + * Nokia Corporation. This material also contains confidential + * information which may not be disclosed to others without the + * prior written consent of Nokia Corporation. + * =========================================================================== + */ + +#include "hgfswsession.h" + +// -------------------------------------------------------------------------- +// CHgFswSession::CHgFswSession +// -------------------------------------------------------------------------- +// +CHgFswSession::CHgFswSession() + { + } + +// -------------------------------------------------------------------------- +// CHgFswSession::Server +// -------------------------------------------------------------------------- +// +CHgFswServer& CHgFswSession::Server() + { + return *static_cast( + const_cast( CSession2::Server() ) ); + } + +// -------------------------------------------------------------------------- +// CHgFswSession::CreateL +// -------------------------------------------------------------------------- +// +void CHgFswSession::CreateL() // codescanner::LFunctionCantLeave (virtual) + { + Server().AddSession(); + } + +// -------------------------------------------------------------------------- +// CHgFswSession::~CHgFswSession +// -------------------------------------------------------------------------- +// +CHgFswSession::~CHgFswSession() + { + CompleteSubscribe( KErrCancel ); + iSubscribeRequests.Close(); + Server().DropSession(); + } + +// -------------------------------------------------------------------------- +// CHgFswSession::CompleteSubscribe +// -------------------------------------------------------------------------- +// +void CHgFswSession::CompleteSubscribe( TInt aError ) + { + for ( TInt i = 0, ie = iSubscribeRequests.Count(); i != ie; ++i ) + { + iSubscribeRequests[i].Complete( aError ); + } + iSubscribeRequests.Reset(); + } + +// -------------------------------------------------------------------------- +// CHgFswSession::ServiceL +// -------------------------------------------------------------------------- +// +void CHgFswSession::ServiceL( const RMessage2& aMessage ) + { + if ( !aMessage.HasCapability( ECapabilityLocalServices ) ) + { + aMessage.Panic( KHgFswPanicName, EPanicAccessDenied ); + return; + } + + switch ( aMessage.Function() ) + { + case EHgFswSubscribe: + iSubscribeRequests.AppendL( aMessage ); + break; + + case EHgFswCancel: + CompleteSubscribe( KErrCancel ); + aMessage.Complete( KErrNone ); + break; + + case EHgFswGetBufferSize: + Server().SerializeAndGetBufferSizeL( aMessage ); + break; + + case EHgFswGetBuffer: + Server().GetBufferL( aMessage ); + break; + + case EHgFswCloseApp: + Server().CloseAppL( aMessage.Int0() ); + aMessage.Complete( KErrNone ); + break; + + case EHgFswSwitchToApp: + Server().SwitchToAppL( aMessage.Int0() ); + aMessage.Complete( KErrNone ); + break; + + case EHgFswForegroundAppUid: + Server().ForegroundAppUidL( aMessage ); + aMessage.Complete( KErrNone ); + break; + + default: + aMessage.Panic( KHgFswPanicName, EPanicIllegalFunction ); + break; + } + } + +// -------------------------------------------------------------------------- +// CHgFswSession::ServiceError +// -------------------------------------------------------------------------- +// +void CHgFswSession::ServiceError( const RMessage2& aMessage, + TInt aError ) + { + if ( aError == KErrBadDescriptor ) + { + aMessage.Panic( KHgFswPanicName, EPanicBadDescriptor ); + } + CSession2::ServiceError( aMessage, aError ); + } + +// -------------------------------------------------------------------------- +// CHgFswSession::FswDataChanged +// called by server when notification is received from engine +// -------------------------------------------------------------------------- +// +void CHgFswSession::FswDataChanged() + { + CompleteSubscribe( KErrNone ); + } + +// -------------------------------------------------------------------------- +// CHgFswSession::IsListening +// -------------------------------------------------------------------------- +// +TBool CHgFswSession::IsListening() + { + return iSubscribeRequests.Count() > 0; + } + + +// end of file