diff -r fb3763350a08 -r 4d54b72983ae taskswitcher/contextengine/hgfswserver/client/src/hgfswclientimpl.cpp --- a/taskswitcher/contextengine/hgfswserver/client/src/hgfswclientimpl.cpp Fri Jan 22 09:35:14 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -/* - * =========================================================================== - * Name : hgfswclientimpl.cpp - * Part of : Huriganes / Fast Swap Server - * Description : Client API, private implementation - * Version : %version: sa1spcx1#10 % - * - * 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 "hgfswclientimpl.h" -#include "hgfswclientobserver.h" -#include "hgfswcommon.h" -#include - -#include "clientlogging.h" - -static TInt StartServer() - { - RProcess server; - const TUidType uid( KNullUid, KNullUid, KHgFswServerUid ); - TInt err = server.Create( KHgFswServerImg, KNullDesC, uid ); - if ( err != KErrNone ) - { - return err; - } - TRequestStatus stat; - server.Rendezvous( stat ); - if ( stat != KRequestPending ) - { - server.Kill( 0 ); - } - else - { - server.Resume(); - } - User::WaitForRequest( stat ); - err = server.ExitType() == EExitPanic ? KErrGeneral : stat.Int(); - server.Close(); - return err; - } - -TInt CHgFswClientImpl::RHgFswClient::Connect() - { - const TInt KAsyncMessageSlots = 4; - const TInt KMaxRetry = 4; - - TInt retry = KMaxRetry; - for ( ; ; ) - { - TInt err = CreateSession( KHgFswServerName, TVersion( 0, 0, 0 ), KAsyncMessageSlots ); - if ( err != KErrNotFound && err != KErrServerTerminated ) - { - return err; - } - if ( !--retry ) - { - return err; - } - err = StartServer(); - if ( err != KErrNone && err != KErrAlreadyExists ) - { - return err; - } - } - } - -void CHgFswClientImpl::RHgFswClient::Subscribe( TRequestStatus& aStatus ) - { - SendReceive( EHgFswSubscribe, aStatus ); - } - -void CHgFswClientImpl::RHgFswClient::CancelSubscribe() - { - SendReceive( EHgFswCancel ); - } - -void CHgFswClientImpl::RHgFswClient::GetContentL( RHgFswArray& aDst ) - { - HGLOG_CONTEXT( GetContentL, HGLOG_LOCAL ); - HGLOG_IN(); - - for ( ; ; ) - { - TPckgBuf bufSize; - User::LeaveIfError( SendReceive( EHgFswGetBufferSize, - TIpcArgs( &bufSize ) ) ); - HBufC8* buf = HBufC8::NewLC( bufSize() ); - TPtr8 p( buf->Des() ); - TInt err = SendReceive( EHgFswGetBuffer, - TIpcArgs( &p, bufSize() ) ); - if ( err == KErrNone ) - { - RDesReadStream strm( p ); - CleanupClosePushL( strm ); - CHgFswEntry::InternalizeArrayL( strm, aDst ); - CleanupStack::PopAndDestroy( &strm ); - } - else if ( err != KErrArgument ) - { - User::Leave( err ); - } - CleanupStack::PopAndDestroy( buf ); - if ( err == KErrNone ) - { - break; - } - // If result was KErrArgument then the size received from GetBufferSize is - // not valid anymore so restart the whole procedure. - } - - HGLOG_OUT(); - } - -void CHgFswClientImpl::RHgFswClient::CloseApp( TInt aWgId ) - { - SendReceive( EHgFswCloseApp, TIpcArgs( aWgId ) ); - } - -void CHgFswClientImpl::RHgFswClient::SwitchToApp( TInt aWgId ) - { - SendReceive( EHgFswSwitchToApp, TIpcArgs( aWgId ) ); - } - -TUid CHgFswClientImpl::RHgFswClient::ForegroundAppUid( TInt aType ) - { - TUid result = KNullUid; - TPckgBuf uidBuf; - if ( SendReceive( EHgFswForegroundAppUid, - TIpcArgs( &uidBuf, &aType ) ) == KErrNone ) - { - result = TUid::Uid( uidBuf() ); - } - return result; - } - -CHgFswClientImpl* CHgFswClientImpl::NewL() - { - CHgFswClientImpl* self = NewLC(); - CleanupStack::Pop( self ); - return self; - } - -CHgFswClientImpl* CHgFswClientImpl::NewLC() - { - CHgFswClientImpl* self = new ( ELeave ) CHgFswClientImpl; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -CHgFswClientImpl::CHgFswClientImpl() - : CActive( CActive::EPriorityStandard ) - { - CActiveScheduler::Add( this ); - } - -CHgFswClientImpl::~CHgFswClientImpl() - { - Cancel(); - iClient.Close(); - } - -void CHgFswClientImpl::ConstructL() - { - User::LeaveIfError( iClient.Connect() ); - } - -void CHgFswClientImpl::GetContentL( RHgFswArray& aDst ) - { - iClient.GetContentL( aDst ); - } - -void CHgFswClientImpl::Subscribe( MHgFswObserver& aObserver ) - { - Cancel(); - iObserver = &aObserver; - iClient.Subscribe( iStatus ); - SetActive(); - } - -void CHgFswClientImpl::CancelSubscribe() - { - Cancel(); - } - -void CHgFswClientImpl::CloseApp( TInt aWgId ) - { - iClient.CloseApp( aWgId ); - } - -void CHgFswClientImpl::SwitchToApp( TInt aWgId ) - { - iClient.SwitchToApp( aWgId ); - } - -TUid CHgFswClientImpl::ForegroundAppUid( TInt aType ) - { - return iClient.ForegroundAppUid( aType ); - } - -void CHgFswClientImpl::RunL() - { - HGLOG_CONTEXT( RunL, HGLOG_LOCAL ); - HGLOG1_IN( "%d", iStatus.Int() ); - - if ( iStatus == KErrNone && iObserver ) - { - iClient.Subscribe( iStatus ); - SetActive(); - iObserver->HandleFswContentChanged(); - } - - HGLOG_OUT(); - } - -void CHgFswClientImpl::DoCancel() - { - iClient.CancelSubscribe(); - } - - -// end of file