--- /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 <e32debug.h>
+#include <w32std.h>
+#include <centralrepository.h>
+#include <featmgr.h>
+#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