diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmserver/Client/Source/ASCliClientUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonappservices/alarmserver/Client/Source/ASCliClientUtils.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,86 @@ +// Copyright (c) 1999-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: +// + +#include + +// System includes +#include + +// User includes +#include + +// +// ----> AlarmClientUtils (source) +// + +/* + * Panic the client + */ +void AlarmClientUtils::Panic(TAlarmClientPanic aPanic) + { + _LIT(KAlarmServerClientPanic, "ALMSRVCLI"); + User::Panic(KAlarmServerClientPanic, aPanic); + } + + +/* + * Panic the client, indicating some form of logic error or terminal + * fault. + */ +void AlarmClientUtils::Fault(TAlarmClientFault aFault) + { + _LIT(KAlarmServerClientFault, "ALMSRVCLIFAULT"); + User::Panic(KAlarmServerClientFault, aFault); + } + + +EXPORT_C TInt AlarmClientUtils::StartAlarmServer() +/** Starts the alarm server. + +@return KErrNone if successful, KErrAlreadyExists if the server is already +running, otherwise a system-wide error. */ + { + // + // EPOC is easy, we just create a new server process. Simultaneous launching + // of two such processes should be detected when the second one attempts to + // create the server object, failing with KErrAlreadyExists. + // + RProcess server; + TInt ret = server.Create(ASCliDefinitions::ServerImageName(), KNullDesC, ASCliDefinitions::ServerUidType()); + + // Did we manage to create the thread/process? + if (ret != KErrNone) + return ret; + + // Wait to see if the thread/process died during construction + TRequestStatus serverDiedRequestStatus; + server.Rendezvous(serverDiedRequestStatus); + + // do we have to abort? + if(serverDiedRequestStatus != KRequestPending) + { + server.Kill(0); // abort the sartup here + } + else + { + server.Resume(); // start server + } + + User::WaitForRequest(serverDiedRequestStatus); + // determine the reason for the server exit + TInt exitReason =(server.ExitType()==EExitPanic) ? KErrGeneral : serverDiedRequestStatus.Int(); + server.Close(); + return exitReason; + }