diff -r 000000000000 -r 2f259fa3e83a commonuisupport/uikon/test/tmessageserv/messageservserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuisupport/uikon/test/tmessageserv/messageservserver.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,124 @@ +// Copyright (c) 2005-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: +// + +/** + @file + @internalComponent - Internal Symbian test code +*/ + + + + +#include "messageservserver.h" +#include "messageservsession.h" + + +/** + Constructor + */ +CMessageServServer::CMessageServServer(TInt aPriority) + : CServer2(aPriority) + { + __DECLARE_NAME(_S("CMessageServServer")); + } + + +/** + Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL + + The method creates and start a the message server by invoking + CServer::Start(). + + */ +void CMessageServServer::New(MMessageProvider *aMessageProvider) + { + CMessageServServer *pS=new CMessageServServer(EPriority); + __ASSERT_ALWAYS(pS!=NULL,PanicServer(ESvrCreateServer)); + HBufC *pN=(&KMessageServerName)->Alloc(); + __ASSERT_ALWAYS(pN!=NULL,PanicServer(ESvrCreateServer)); + + pS->iMessageProvider = aMessageProvider; + + TInt r=pS->Start(*pN); + __ASSERT_ALWAYS(r==KErrNone,PanicServer(ESvrStartServer)); + } + + +/** + Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL. + + This method identifies the client thread. It then creates an returns a server + session for the client. The new server session is created by calling + CMessageServSession::NewL(). + +*/ +CSession2 *CMessageServServer::NewSessionL(const TVersion &aVersion, const RMessage2& ) const + { + // check we're the right version + TVersion v(KMessageServMajorVersionNumber,KMessageServMinorVersionNumber,KMessageServBuildVersionNumber); + if (!User::QueryVersionSupported(v,aVersion)) + User::Leave(KErrNotSupported); + // make new session + //RThread thread;// = Message().Client(); + //aMessage.Client(thread); + + return CMessageServSession::NewL((CMessageServServer*)this); + } + +/** + + Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL + + The method creates & installs an active scheduler for the server thread. It + then creates & a message server instance by calling CMessageServServer::New(). + The message server is then set ready to run by invoking RSemaphore::Signal(). + + */ +EXPORT_C TInt CMessageServServer::ThreadFunction(TAny* anArg) + { + MMessageProvider *theProvider = (MMessageProvider*) anArg; + + // convert argument into semaphore reference + RSemaphore& semaphore= theProvider->Semaphore(); + + // start scheduler and server + CActiveScheduler *pA=new CActiveScheduler; + __ASSERT_ALWAYS(pA!=NULL,PanicServer(EMainSchedulerError)); + CActiveScheduler::Install(pA); + CMessageServServer::New(theProvider); + // signal that we've started + semaphore.Signal(); + // start fielding requests from clients + CActiveScheduler::Start(); + // finished + + //Adding a delay here seems to fix the crash on multicore SMP naviengine + User::After(200000); + + return(KErrNone); + } + +/** + Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL + + This method is used to panic the server thread. + + */ +GLDEF_C void PanicServer(TMessageServPanic aPanic) + { + _LIT(KTxtServerPanic,"server panic"); + User::Panic(KTxtServerPanic,aPanic); + } +