harvester/harvesterserver/src/charvesterserver.cpp
changeset 0 671dee74050a
child 8 6547bf8ca13a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvester/harvesterserver/src/charvesterserver.cpp	Mon Apr 19 14:40:16 2010 +0300
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+// INCLUDE FILES
+#include <e32svr.h>
+
+#include "CHarvesterServer.h"
+#include "CHarvesterServerSession.h"
+#include "CIndexingManager.h"
+#include "HarvesterServerCommons.h"
+
+// ========================= MEMBER FUNCTIONS ==================================
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHarvesterServer* CHarvesterServer::NewL()
+	{
+	CHarvesterServer* HarvesterServer = CHarvesterServer::NewLC();
+	CleanupStack::Pop(HarvesterServer);
+	return HarvesterServer;
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHarvesterServer* CHarvesterServer::NewLC()
+	{
+	CHarvesterServer* HarvesterServer = new ( ELeave ) CHarvesterServer( EPriorityNormal );
+	CleanupStack::PushL(HarvesterServer);
+	HarvesterServer->ConstructL();
+	return HarvesterServer;
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CHarvesterServer::ConstructL()
+	{
+	iIndexingManager = CIndexingManager::NewL();
+	StartL(KHarvesterServerName);
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::CHarvesterServer()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CHarvesterServer::CHarvesterServer(TInt aPriority) :
+	CServer2(aPriority)
+	{
+	// Implementation not required
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::~CHarvesterServer()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CHarvesterServer::~CHarvesterServer()
+	{
+	delete iIndexingManager;
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::NewSessionL()
+// Creates a time server session.
+// -----------------------------------------------------------------------------
+//
+CSession2* CHarvesterServer::NewSessionL(const TVersion& aVersion,
+		const RMessage2& /*aMessage*/) const
+	{
+	// Check we are the right version
+	if ( !User::QueryVersionSupported(TVersion(KHarvesterServerMajorVersionNumber,
+			KHarvesterServerMinorVersionNumber, KHarvesterServerBuildVersionNumber), aVersion) )
+		{
+		User::Leave(KErrNotSupported);
+		}
+
+	// Make new session
+	return CHarvesterServerSession::NewL(/**iGlue*/);
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::PanicClient()
+// Panics the client.
+// -----------------------------------------------------------------------------
+//
+void CHarvesterServer::PanicClient(const RMessage2& aMessage,
+		THarvesterServerPanic aPanic)
+	{
+	aMessage.Panic(KHarvesterServer, aPanic);
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::PanicServer()
+// Panics the server.
+// -----------------------------------------------------------------------------
+//
+void CHarvesterServer::PanicServer(THarvesterServerPanic aPanic)
+	{
+	User::Panic(KHarvesterServer, aPanic);
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::ThreadFunctionL()
+// Second stage startup for the server thread.
+// -----------------------------------------------------------------------------
+//
+void CHarvesterServer::ThreadFunctionL()
+	{
+	// Construct active scheduler
+	CActiveScheduler* activeScheduler = new ( ELeave ) CActiveScheduler;
+	CleanupStack::PushL(activeScheduler);
+
+	// Install active scheduler
+	CActiveScheduler::Install(activeScheduler);	
+		
+	// Construct server
+	CHarvesterServer* server = CHarvesterServer::NewLC();
+	
+	// Set thread priority
+	RProcess().SetPriority(EPriorityBackground);
+	
+    // Rename the thread.
+    User::RenameThread(KHarvesterServerName);        
+    RProcess::Rendezvous(KErrNone);           
+
+	// Signal client thread if started by such
+	RSemaphore semaphore;
+	TInt err = semaphore.OpenGlobal(KHarvesterServerSemaphoreName);
+	if (KErrNone == err)
+		{
+		// Started by client
+		semaphore.Signal();
+		semaphore.Close();
+		}
+	else
+		{
+		if (KErrNotFound == err)
+			{
+			// Started by S60 starter
+			}
+		else
+			{
+			// Unknown error, leave
+			User::Leave(err);
+			}
+		}
+	
+	// Start handling requests
+	CActiveScheduler::Start();
+
+	// Cleanup
+	CleanupStack::PopAndDestroy( server );
+	CleanupStack::PopAndDestroy( activeScheduler );
+	}
+
+// -----------------------------------------------------------------------------
+// CHarvesterServer::ThreadFunction()
+// Main function for the server thread.
+// -----------------------------------------------------------------------------
+//
+void CHarvesterServer::ThreadFunction()
+	{
+    __UHEAP_MARK;
+	CTrapCleanup* cleanupStack = CTrapCleanup::New();
+	
+	if ( !cleanupStack )
+		{
+		PanicServer(ECreateTrapCleanup);
+		}
+
+	TRAPD( err, ThreadFunctionL() );
+	if ( err )
+		{
+		PanicServer(ESrvCreateServer);
+		}
+
+	delete cleanupStack;
+    __UHEAP_MARKEND;    
+	}
+
+// -----------------------------------------------------------------------------
+// E32Main()
+// Provides the API for the operating system to start the executable.
+// Returns the address of the function to be called.
+// -----------------------------------------------------------------------------
+//
+TInt E32Main()
+	{
+	CHarvesterServer::ThreadFunction();
+	return KErrNone;
+	}
+
+// End of File