installationservices/swi/test/tsisfile/tocspserver.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisfile/tocspserver.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* tocsp.cpp
+*
+*/
+
+
+#include "log.h"
+#include "tocspserver.h"
+#include "tocspclientserver.h"
+
+using Swi::Test::COcspServer;
+using Swi::Test::COcspSession;
+using Swi::Test::COcspServerShutdown;
+
+static void PanicClient(const RMessagePtr2& aMessage, 
+						Swi::Test::TOcspServerPanic aPanic)
+	{
+	aMessage.Panic(Swi::Test::KOcspServerName, aPanic);
+	}
+
+/////
+///// TOCSP Server
+/////
+
+/*static*/ COcspServer* COcspServer::NewLC()
+	{
+	COcspServer* self = new(ELeave) COcspServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+void COcspServer::AddSession()
+	{
+	FLOG(_L("Console Server added session"));
+	++iSessionCount;
+	iShutdown->Cancel();
+	}
+	
+void COcspServer::DropSession()
+	{
+	FLOG(_L("Console Server dropped session"));
+	if (--iSessionCount==0)
+		{
+		iShutdown->Start();
+		FLOG(_L("Console Server shutting down"))
+		}
+	}
+
+COcspServer::~COcspServer()
+	{
+	delete iShutdown;
+	delete iConsole;
+	FLOG(_L("Console Server destructor"))
+	}
+
+COcspServer::COcspServer() : CServer2(EPriorityNormal, ESharableSessions)
+	{
+	}
+
+void COcspServer::ConstructL()
+	{
+	StartL(Swi::Test::KConsoleServerName);
+	iConsole = Console::NewL(_L("SWI Console Server Test"), TSize(KDefaultConsWidth, KDefaultConsHeight));
+	iShutdown = COcspServerShutdown::NewL();
+	// Ensure that the server still exits even if the 1st client fails to
+	// connect
+	iShutdown->Start();
+	}
+
+CSession2* COcspServer::NewSessionL(const TVersion& /*aVersion*/, 
+									   const RMessage2& /*aMessage*/) const
+	{
+	return new(ELeave) COcspSession(*iConsole);
+	}
+
+void COcspSession::CreateL()
+	{
+	Server().AddSession();
+	}
+
+COcspSession::COcspSession(CConsoleBase& aConsole) : CSession2(), iConsole(aConsole)
+	{
+	}
+
+COcspSession::~COcspSession()
+	{
+	Server().DropSession();
+	}
+
+COcspServer& COcspSession::Server()
+	{
+	return *static_cast<COcspServer*>(
+		const_cast<CServer2*>(CSession2::Server()));
+	}
+
+/////
+///// COcspSession		
+/////
+	
+void COcspSession::ServiceL(const RMessage2& aMessage)
+	{
+	switch (aMessage.Function())
+		{
+		/*case EPrint:
+		{
+		FLOG(_L("COcspSession::ServiceL(EPrint)"));
+		TInt length = User::LeaveIfError(aMessage.GetDesMaxLength(0));
+		HBufC* string = HBufC::NewMaxLC(length);
+		TPtr stringBuffer(string->Des());
+		aMessage.Read(0, stringBuffer);
+		iConsole.Printf(*string); 
+		aMessage.Complete(KErrNone);
+		break;
+		}
+	case EGet:
+		{
+		FLOG(_L("COcspSession::ServiceL(EGet)"));
+		aMessage.Complete(iConsole.Getch());
+		break;
+		}*/
+	default:
+		{
+		FLOG(_L("COcspSession::ServiceL(): unknown function"));
+		PanicClient(aMessage, Swi::Test::EPanicOcspServerIllegalFunction);
+		break;
+		}
+		}
+	}
+
+void COcspSession::ServiceError(const RMessage2& aMessage, TInt aError)
+	{
+	if (aError==KErrBadDescriptor)
+		{
+		PanicClient(aMessage, Swi::Test::EPanicConsoleServerBadDescriptor);
+		}
+	CSession2::ServiceError(aMessage, aError);
+	}
+
+/////
+///// CInstallServerShutdown
+/////
+		
+inline COcspServerShutdown::COcspServerShutdown() : CTimer(-1)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+inline void COcspServerShutdown::ConstructL()
+	{
+	CTimer::ConstructL();
+	}
+
+inline void COcspServerShutdown::Start()
+	{
+	After(KShutdownDelay);
+	}
+
+/*static*/ COcspServerShutdown* COcspServerShutdown::NewL()
+	{
+	COcspServerShutdown* self = new(ELeave) COcspServerShutdown();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// Initiate server exit when the timer expires
+void COcspServerShutdown::RunL()
+	{
+	FLOG(_L("COcspServerShutdown::RunL(): stopping Test Console Server"));
+	CActiveScheduler::Stop();
+	}