diff -r 000000000000 -r d54f32e146dd tacticonserver/server/src/tacticonserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tacticonserver/server/src/tacticonserver.cpp Thu Dec 17 08:53:38 2009 +0200 @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2009 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: Tacticon server implementation. +* Part of : Tacticon Server +*/ + +#include +#include +#include +#include +#include "tacticonserver.h" +#include "tacticonsession.h" +#include "tacticondefs.h" +#include "tacticonshutdown.h" +#include "tacticontrace.h" +#include "osttracedefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "tacticonservertraces.h" +#endif + +// -------------------------------------------------------------------------- +// RunServerL +// Initialize and run the server. +// -------------------------------------------------------------------------- +// +static void RunServerL() + { + TRACE( "Tacticon server RunServer() - Begin" ); + User::LeaveIfError( RThread().RenameMe( KTacticonServerName ) ); + + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL( scheduler ); + CActiveScheduler::Install( scheduler ); + + CTacticonServer* server = CTacticonServer::NewLC(); + + RProcess::Rendezvous( KErrNone ); + + CActiveScheduler::Start(); + + // Cleanup server and scheduler + CleanupStack::PopAndDestroy(server); + CleanupStack::PopAndDestroy(scheduler); + TRACE("Tacticon server RunServer() - End"); + } + +// -------------------------------------------------------------------------- +// E32Main +// Server process entry-point. +// -------------------------------------------------------------------------- +// +TInt E32Main() + { + __UHEAP_MARK; + CTrapCleanup* cleanup = CTrapCleanup::New(); + TInt ret( KErrNoMemory ); + if( cleanup ) + { + TRAP( ret, RunServerL() ); + delete cleanup; + } + __UHEAP_MARKEND; + return ret; + } + +// -------------------------------------------------------------------------- +// CTacticonServer::NewL +// 2-phased constructor. +// -------------------------------------------------------------------------- +// +CTacticonServer* CTacticonServer::NewLC() + { + TRACE( "CTacticonServer::NewLC - Begin" ); + CTacticonServer* self = new (ELeave) CTacticonServer(); + CleanupStack::PushL(self); + self->ConstructL(); + TRACE("CTacticonServer::NewLC - End"); + return self; + } + +// -------------------------------------------------------------------------- +// CTacticonServer::CTacticonServer() +// C++ constructor. +// -------------------------------------------------------------------------- +// +CTacticonServer::CTacticonServer() + : CPolicyServer( EPriorityNormal, + KTacticonPolicy, + ESharableSessions ), + iTacticonsEnabled( ETrue ) + { + } + +// -------------------------------------------------------------------------- +// CTacticonServer::ConstructL +// 2nd phase constructor. +// -------------------------------------------------------------------------- +// +void CTacticonServer::ConstructL() + { + TRACE( "CTacticonServer::ConstructL - Begin" ); + StartL( KTacticonServerName); + TRACE( "CTacticonServer::ConstructL - Server started" ); + iRepository = CRepository::NewL( KCRUidTacticon ); + + TInt pluginUid(0); + User::LeaveIfError( iRepository->Get( KTacticonPlugin, pluginUid ) ); + TRACE2( "CTacticonServer::ConstructL - got pluginUid: %d", pluginUid ); + + TRACE("CTacticonServer::ConstructL - creating player"); + // The server is instantiated during boot time. To enable phone to boot up + // even if player instatiation fails, trap its possible failure. + TRAPD(err, iPlayer = CTacticonPlayer::NewL( TUid::Uid(pluginUid), *iRepository ) ); + if ( err ) + { + TRACE2( "CTacticonServer::ConstructL - Creating Player failed with code %d", err ); + iPlayer = NULL; // to ensure that player pointer is not broken + } + + TRACE( "CTacticonServer::ConstructL - Creating shutdown instance" ); + iShutdown = CTacticonShutdown::NewL(); + TRACE( "CTacticonServer::ConstructL - End" ); + } + +// -------------------------------------------------------------------------- +// CTacticonServer::CTacticonServer() +// C++ destructor. +// -------------------------------------------------------------------------- +// +CTacticonServer::~CTacticonServer() + { + delete iPlayer; + delete iRepository; + delete iShutdown; + REComSession::FinalClose(); + } + +// -------------------------------------------------------------------------- +// CTacticonServer::NewSessionL +// from CServer2, creates a new session. +// -------------------------------------------------------------------------- +// +CSession2* CTacticonServer::NewSessionL( const TVersion& aVersion, + const RMessage2& /*aMessage*/ ) const + { + TRACE("CTacticonServer::NewSessionL - Begin"); + TVersion version( KTacticonServerMajor, + KTacticonServerMinor, KTacticonServerBuild ); + + TBool supported = User::QueryVersionSupported( version, aVersion ); + + if( !supported ) + { + TRACE("CTacticonServer::NewSessionL - Version not supported"); + User::Leave( KErrNotSupported ); + } + + CTacticonSession* session = new (ELeave) CTacticonSession(); + TRACE("CTacticonServer::NewSessionL - End"); + return session; + } + +// -------------------------------------------------------------------------- +// CTacticonServer::AddSession +// -------------------------------------------------------------------------- +// +void CTacticonServer::AddSession() + { + TRACE("CTacticonServer::AddSession - Begin"); + iSessionCount++; + iShutdown->Cancel(); + TRACE("CTacticonServer::AddSession - End"); + } + +// -------------------------------------------------------------------------- +// CTacticonServer::RemoveSession +// -------------------------------------------------------------------------- +// +void CTacticonServer::RemoveSession() + { + TRACE( "CTacticonServer::RemoveSession - Begin" ); + iSessionCount--; + + // Start the shutdown timer there are no more sessions + if ( !iSessionCount && !iShutdown->IsActive() ) + { + iShutdown->Start(); + } + TRACE( "CTacticonServer::RemoveSession - End" ); + } + +// -------------------------------------------------------------------------- +// CTacticonServer::PlayTacticon +// -------------------------------------------------------------------------- +// +void CTacticonServer::PlayTacticon( TTacticonType aTacticonType ) + { + if ( iPlayer && iTacticonsEnabled ) + { + OstTrace0( TACTICON_PERFORMANCE, TACTICON_SERVER_PLAY_TACTICON_1, + "e_TACTICON_SERVER_PLAY_TACTICON 1" ); + + iPlayer->PlayTacticon( aTacticonType ); + + OstTrace0( TACTICON_PERFORMANCE, TACTICON_SERVER_PLAY_TACTICON_0, + "e_TACTICON_SERVER_PLAY_TACTICON 0" ); + } + else + { + TRACE("CTacticonServer::PlayTacticon - Player not available"); + } + } + +// -------------------------------------------------------------------------- +// CTacticonServer::StopTacticon +// -------------------------------------------------------------------------- +// +void CTacticonServer::StopTacticon() + { + if ( iPlayer ) + { + OstTrace0( TACTICON_PERFORMANCE, TACTICON_SERVER_STOP_TACTICON_1, + "e_TACTICON_SERVER_STOP_TACTICON 1" ); + + iPlayer->StopTacticon(); + + OstTrace0( TACTICON_PERFORMANCE, TACTICON_SERVER_STOP_TACTICON_0, + "e_TACTICON_SERVER_STOP_TACTICON 0" ); + } + } + +// -------------------------------------------------------------------------- +// CTacticonServer::EnableTacticons +// -------------------------------------------------------------------------- +// +void CTacticonServer::EnableTacticons( TBool aEnabled ) + { + iTacticonsEnabled = aEnabled; + } + +// -------------------------------------------------------------------------- +// CTacticonServer::EnableTacticons +// -------------------------------------------------------------------------- +// +TBool CTacticonServer::TacticonsEnabled() + { + return iTacticonsEnabled; + } + +// End of file