diff -r fb3763350a08 -r 4d54b72983ae taskswitcher/contextengine/hgfswserver/server/src/hgfswserver.cpp --- a/taskswitcher/contextengine/hgfswserver/server/src/hgfswserver.cpp Fri Jan 22 09:35:14 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/* - * =========================================================================== - * Name : hgfswserver.cpp - * Part of : Huriganes / Fast Swap Server - * Description : server implementation - * Version : %version: sa1spcx1#14 % - * - * 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 "hgfswserver.h" -#include "hgfswsession.h" -#include "hgfswappui.h" -#include "hgfswengine.h" - -#include -#include -#include - -// -------------------------------------------------------------------------- -// CHgFswServer::CHgFswServer -// -------------------------------------------------------------------------- -// -CHgFswServer::CHgFswServer( TInt aPriority, CHgFswAppUi& aAppUi ) - : CServer2( aPriority ), iAppUi( aAppUi ) - { - } - -// -------------------------------------------------------------------------- -// CHgFswServer::NewLC -// -------------------------------------------------------------------------- -// -CHgFswServer* CHgFswServer::NewLC( CHgFswAppUi& aAppUi ) - { - CHgFswServer* self = new ( ELeave ) CHgFswServer( - EPriorityNormal, aAppUi ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// -------------------------------------------------------------------------- -// CHgFswServer::ConstructL -// -------------------------------------------------------------------------- -// -void CHgFswServer::ConstructL() - { - StartL( KHgFswServerName ); - iEngine = CHgFswEngine::NewL( *this ); - iAppUi.SetTaskListObserver( *iEngine ); - iAppUi.SetResourceObserver( *iEngine ); - } - -// -------------------------------------------------------------------------- -// CHgFswServer::~CHgFswServer -// -------------------------------------------------------------------------- -// -CHgFswServer::~CHgFswServer() - { - delete iBuffer; - delete iEngine; - } - -// -------------------------------------------------------------------------- -// CHgFswServer::NewSessionL -// -------------------------------------------------------------------------- -// -CSession2* CHgFswServer::NewSessionL( const TVersion&, - const RMessage2& ) const - { - return new ( ELeave ) CHgFswSession; - } - -// -------------------------------------------------------------------------- -// CHgFswServer::AddSession -// -------------------------------------------------------------------------- -// -void CHgFswServer::AddSession() - { - ++iSessionCount; - } - -// -------------------------------------------------------------------------- -// CHgFswServer::DropSession -// -------------------------------------------------------------------------- -// -void CHgFswServer::DropSession() - { - --iSessionCount; - } - -// -------------------------------------------------------------------------- -// CHgFswServer::SerializeAndGetBufferSizeL -// -------------------------------------------------------------------------- -// -void CHgFswServer::SerializeAndGetBufferSizeL( const RMessage2& aMessage ) - { - const TInt KBufferExpandSize = 128; - const RHgFswArray& array( iEngine->FswDataL() ); - delete iBuffer; iBuffer = NULL; - iBuffer = CBufFlat::NewL( KBufferExpandSize ); - RBufWriteStream ws; - CleanupClosePushL( ws ); - ws.Open( *iBuffer ); - CHgFswEntry::ExternalizeArrayL( ws, array ); - CleanupStack::PopAndDestroy( &ws ); - TPtr8 p( iBuffer->Ptr( 0 ) ); - TPckg size( p.Length() ); - aMessage.WriteL( 0, size ); - aMessage.Complete( KErrNone ); - } - -// -------------------------------------------------------------------------- -// CHgFswServer::GetBufferL -// -------------------------------------------------------------------------- -// -void CHgFswServer::GetBufferL( const RMessage2& aMessage ) - { - if ( !iBuffer ) - { - User::Leave( KErrGeneral ); - } - TPtr8 p( iBuffer->Ptr( 0 ) ); - // If the size expected by the client does not match indicate it with a leave - // so the client can recognize it by checking the return value of SendReceive - // and can request the buffer size again. - if ( p.Length() != aMessage.Int1() ) - { - User::Leave( KErrArgument ); - } - aMessage.WriteL( 0, p ); - aMessage.Complete( KErrNone ); - } - -// -------------------------------------------------------------------------- -// CHgFswServer::CloseAppL -// -------------------------------------------------------------------------- -// -void CHgFswServer::CloseAppL( TInt aWgId ) - { - iEngine->CloseAppL( aWgId ); - } - -// -------------------------------------------------------------------------- -// CHgFswServer::SwitchToAppL -// -------------------------------------------------------------------------- -// -void CHgFswServer::SwitchToAppL( TInt aWgId ) - { - iEngine->SwitchToAppL( aWgId ); - } - -// -------------------------------------------------------------------------- -// CHgFswServer::ForegroundAppUidL -// -------------------------------------------------------------------------- -// -void CHgFswServer::ForegroundAppUidL( const RMessage2& aMessage ) - { - TUid uid = iEngine->ForegroundAppUidL( aMessage.Int1() ); - TPckg uidPckg( uid.iUid ); - aMessage.WriteL( 0, uidPckg ); - } - -// -------------------------------------------------------------------------- -// CHgFswServer::FswDataChanged -// callback from engine -// -------------------------------------------------------------------------- -// -void CHgFswServer::FswDataChanged() - { - // notify all sessions about the change - iSessionIter.SetToFirst(); - while ( CHgFswSession* session = static_cast( iSessionIter++ ) ) - { - if ( session->IsListening() ) - { - session->FswDataChanged(); - } - } - } - -// -------------------------------------------------------------------------- -// CHgFswServer::FswDataListenersCount -// callback from engine -// -------------------------------------------------------------------------- -// -TInt CHgFswServer::FswDataListenerCount() - { - TInt n = 0; - iSessionIter.SetToFirst(); - while ( CHgFswSession* session = static_cast( iSessionIter++ ) ) - { - if ( session->IsListening() ) - { - ++n; - } - } - return n; - } - -// -------------------------------------------------------------------------- -// RunServerL -// -------------------------------------------------------------------------- -// -static void RunServerL( CHgFswAppUi& aAppUi, CEikonEnv& aEnv ) - { - // change thread name - User::LeaveIfError( RThread::RenameMe( KHgFswServerName ) ); - - // set app as hidden - CApaWindowGroupName* wgName = - CApaWindowGroupName::NewL( aEnv.WsSession(), - aEnv.RootWin().Identifier() ); - wgName->SetHidden( ETrue ); - wgName->SetWindowGroupName( aEnv.RootWin() ); - delete wgName; - - // start server - CHgFswServer* server = CHgFswServer::NewLC( aAppUi ); - RProcess::Rendezvous( KErrNone ); - CActiveScheduler::Start(); - CleanupStack::PopAndDestroy( server ); - } - -// -------------------------------------------------------------------------- -// E32Main -// -------------------------------------------------------------------------- -// -TInt E32Main() - { - __UHEAP_MARK; - CTrapCleanup* cleanup = CTrapCleanup::New(); - TInt err = KErrNoMemory; - if ( cleanup ) - { - CEikonEnv* env = new CEikonEnv; - if ( env ) - { - TRAP( err, env->ConstructL() ); - if ( err == KErrNone ) - { - env->DisableExitChecks( ETrue ); - CHgFswAppUi* ui = new CHgFswAppUi; - if ( ui ) - { - TRAP( err, ui->ConstructL() ); - if ( err == KErrNone ) - { - // hide from tasklist and prevent from coming foreground - env->RootWin().SetOrdinalPosition( 0, - ECoeWinPriorityNeverAtFront ); - // set as system app so will not be closed when memory is low - env->SetSystem( ETrue ); - - RFbsSession::Connect(); - - TRAP( err, RunServerL( *ui, *env ) ); - - RFbsSession::Disconnect(); - - ui->PrepareToExit(); - } - } - } - env->DestroyEnvironment(); - } - delete cleanup; - } - __UHEAP_MARKEND; - return err; - } - - -// end of file