tacticonserver/server/src/tacticonserver.cpp
changeset 0 d54f32e146dd
child 12 63c33341dc19
--- /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