phoneapp/phoneringingtoneplayer/src/cphonetoneserver.cpp
changeset 78 baacf668fe89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneringingtoneplayer/src/cphonetoneserver.cpp	Fri Oct 15 12:58:46 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 - 2010 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:  Ringing tone server.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+
+#include "phoneringingtonetrace.h"
+#include "cphonetoneserver.h"
+#include "cphonetoneserversession.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::CPhoneToneServer
+// -----------------------------------------------------------------------------
+//
+CPhoneToneServer::CPhoneToneServer()
+    : CServer2( EPriorityHigh )
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::CPhoneToneServer <");
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::CPhoneToneServer >");    
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::~CPhoneToneServer
+// -----------------------------------------------------------------------------
+//
+CPhoneToneServer::~CPhoneToneServer()
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::~CPhoneToneServer <");
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::~CPhoneToneServer >");        
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::NewLC
+// -----------------------------------------------------------------------------
+//
+CPhoneToneServer* CPhoneToneServer::NewLC()
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::NewLC <");
+    CPhoneToneServer* self = new( ELeave )CPhoneToneServer;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::NewLC >");    
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneToneServer::ConstructL()
+    { 
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::ConstructL <");  
+    StartL( KRingingToneServerName );
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::ConstructL >");
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::NewSessionL
+// -----------------------------------------------------------------------------
+//
+CSession2* CPhoneToneServer::NewSessionL( const TVersion& /*aVersion*/,  
+                                          const RMessage2& /*aMessage*/ ) const
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::NewSessionL <");
+    if ( iHasConnection )
+        {
+        // Server should be unique connectable.
+        User::Leave( KErrAccessDenied  );
+        //return NULL;
+        }
+    CSession2* session = CPhoneToneServerSession::NewL(*this );
+    iHasConnection = ETrue;
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::NewSessionL >");
+    return session;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::ThreadEntryFunc
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneToneServer::ThreadEntryFunc( TAny* /*aPtr*/ )
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::ThreadEntryFunc <");
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    CActiveScheduler* scheduler = new CActiveScheduler;
+
+    // Check that all allocations were ok
+    if ( !cleanup || !scheduler )
+        {
+        // Out of memory
+        delete scheduler;
+        delete cleanup;
+        return KErrNoMemory;
+        }
+    // Install active scheduler
+    CActiveScheduler::Install( scheduler );
+    // Run the server
+    TRAPD( err, CPhoneToneServer::RunServerL() );
+    // Uninstall active scheduler
+    CActiveScheduler::Install( NULL );
+    // Cleanup
+    delete scheduler;
+    delete cleanup;
+
+    PHONERINGINGTONE_PRINTF("CPhoneToneServer::ThreadEntryFunc - err(%d)",err); 
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::ThreadEntryFunc >");
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::RunDown
+// -----------------------------------------------------------------------------
+//
+void CPhoneToneServer::RunDown() const 
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::RunDown <");
+    CActiveScheduler::Stop();
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::RunDown >");    
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneToneServer::RunServerL
+// -----------------------------------------------------------------------------
+//
+void CPhoneToneServer::RunServerL()
+    {
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::RunServerL <");
+    // Allocate server
+    CPhoneToneServer* server = CPhoneToneServer::NewLC();
+    // Notify that we're running
+    RThread::Rendezvous( KErrNone );
+    // Start active scheduler
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy(); // server
+    PHONERINGINGTONE_PRINT("CPhoneToneServer::RunServerL >")
+    }
+
+// End of file.
+