diff -r 6757f1e2efd2 -r 5b858729772b customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverSession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/customization/ScreenSaverAdapter/ScreenSaverServer/src/ScreenSaverSession.cpp Wed Sep 01 12:31:32 2010 +0100 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 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: Implementation of customization components +* +*/ + + +#include +#include "ScreenSaverSession.h" +#include "ScreenSaverClientServer.h" +#include +#include "debug.h" +#include +#include +#include + +CScreenSaverSession::CScreenSaverSession() + { + RDEBUG("CScreenSaverSession::CScreenSaverSession"); + } + + +CScreenSaverSession::~CScreenSaverSession() + { + RDEBUG("CScreenSaverSession::~CScreenSaverSession"); + Server().DropSession(); + } + +CScreenSaverServer& CScreenSaverSession::Server() + { + return *static_cast(const_cast(CSession2::Server())); + } + +// ---------------------------------------------------------------------------------------- +// CScreenSaverSession::CreateL +// 2nd phase construct for sessions - called by the CServer framework +// ---------------------------------------------------------------------------------------- +void CScreenSaverSession::CreateL() + { + RDEBUG("CScreenSaverSession::CreateL"); + Server().AddSession(); + + } + + +void CScreenSaverSession::ServiceL(const RMessage2& aMessage) + { + TRAPD(err,DispatchMessageL(aMessage)); + aMessage.Complete(err); + } + +void CScreenSaverSession::ServiceError(const RMessage2& aMessage,TInt aError) + { + RDEBUG_2("CScreenSaverSession::ServiceError %d",aError); + CSession2::ServiceError(aMessage,aError); + } + + +void CScreenSaverSession::DispatchMessageL(const RMessage2& aMessage) + { + + switch(aMessage.Function()) + { + case EGetAvailableScreenSavers: + { + RDEBUG(" DispatchMessageL case: EGetAvailableScreenSavers"); + + + RImplInfoPtrArray screenSaverList; + CleanupResetAndDestroyPushL( screenSaverList ); + Server().GetAvailableScreenSaversL(screenSaverList); + + TInt ssCount(0); + ssCount = screenSaverList.Count(); + RDEBUG_2(" DispatchMessageL case: EGetAvailableScreenSavers : SSCount : %d",ssCount); + HBufC8* buffer = HBufC8::NewLC((sizeof(TUid)*ssCount)+sizeof(TInt8)); + TPtr8 bufPtr = buffer->Des(); + + RDesWriteStream stream; + stream.Open( bufPtr ); + + CleanupClosePushL(stream); + + const TInt count = screenSaverList.Count(); + + stream.WriteUint8L(TUint(count)); + for ( TInt i = 0 ; i < count ; i++ ) + { + CImplementationInformation* implInfo = screenSaverList[i]; + stream.WriteInt32L( implInfo->ImplementationUid().iUid); + } + stream.CommitL(); + aMessage.WriteL( 0, bufPtr, 0 ); + + CleanupStack::PopAndDestroy(&stream); + + CleanupStack::PopAndDestroy(buffer); + + CleanupStack::PopAndDestroy( &screenSaverList ); // screenSaverList + + } + break; + + case EGetscreensaverInfo: + { + RDEBUG(" DispatchMessageL case: EGetscreensaverInfo"); + + RImplInfoPtrArray screenSaverList; + CleanupResetAndDestroyPushL( screenSaverList ); + + Server().GetAvailableScreenSaversL(screenSaverList); + + TInt ssCount(0); + ssCount = screenSaverList.Count(); + RDEBUG_2(" DispatchMessageL case: EGetscreensaverInfo : SSCount : %d",ssCount); + + HBufC8* buffer = HBufC8::NewLC(KSSInfoBufferLength*ssCount); + TPtr8 bufPtr = buffer->Des(); + + RDesWriteStream stream; + stream.Open( bufPtr ); + CleanupClosePushL(stream); + + const TInt count = screenSaverList.Count(); + + stream.WriteUint8L(TUint(count)); + + for ( TInt i = 0 ; i < count ; i++ ) + { + CImplementationInformation* implInfo = screenSaverList[i]; + + stream.WriteInt32L( implInfo->ImplementationUid().iUid); //Uid + stream.WriteInt32L( implInfo->Version()); //Version + + stream.WriteInt32L( implInfo->DisplayName().Length()); //Dispaly Name + stream << implInfo->DisplayName(); + + stream.WriteInt32L( implInfo->OpaqueData().Length()); //Opaque Data + stream << implInfo->OpaqueData(); + + } + stream.CommitL(); + aMessage.WriteL( 0, bufPtr, 0 ); + + CleanupStack::PopAndDestroy(&stream); + CleanupStack::PopAndDestroy(buffer); + CleanupStack::PopAndDestroy( &screenSaverList ); + + } + break; + + case EScreenSaversCount: + { + RDEBUG(" DispatchMessageL case: EScreenSaversCount"); + + RImplInfoPtrArray screenSaverCount; + CleanupResetAndDestroyPushL( screenSaverCount ); + TInt count(0); + + Server().GetAvailableScreenSaversL(screenSaverCount); + + count = screenSaverCount.Count(); + TPckgBufssCount(count); + + aMessage.WriteL(0,ssCount); + CleanupStack::Pop(&screenSaverCount) ; + screenSaverCount.ResetAndDestroy(); + + } + break; + default: + break; + } + } +