diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstarter/test/sysmondemo/src/sysmondemocli.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstarter/test/sysmondemo/src/sysmondemocli.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,215 @@ +// Copyright (c) 2006-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 "sysmondemo.h" +#include "e32cons.h" +#include "e32cmn.h" +#include "bacline.h" +#include "restartsys.h" + +_LIT(KPOKE, "poke") ; +_LIT(KKILL, "kill") ; +_LIT(KDONE, "done") ; +_LIT(KRESTART, "restart") ; + + +static TInt StartServer() +// +// Start the server process. Simultaneous launching +// of two such processes should be detected when the second one attempts to +// create the server object, failing with KErrAlreadyExists. +// + { + /* we shall not load the server if it is not there*/ + return -1 ; + } + + +TInt RDemoCli::Open() +{ + TInt retry=2; + for (;;) + { + TInt r=CreateSession(KDemoServerName,TVersion(0,0,0),1); + if (r!=KErrNotFound && r!=KErrServerTerminated) + return r; + if (--retry==0) + return r; + r=StartServer(); + if (r!=KErrNone && r!=KErrAlreadyExists) + return r; + } +} + +void RDemoCli::Close() +{ + RSessionBase::Close() ; +} + +void RDemoCli::Poke(TTime &time) +{ +// TPckgBuf buf(&time) ; +// TIpcArgs ipcArgs(&buf) ; + + TPckg buf(time) ; + TIpcArgs ipcArgs(&buf) ; + + SendReceive(EServerPoke,ipcArgs) ; +} + +void RDemoCli::Kill(TTime &time) +{ +// TPckgBuf buf(&time) ; +// TIpcArgs ipcArgs(&buf) ; + + TPckg buf(time) ; + TIpcArgs ipcArgs(&buf) ; + + SendReceive(EServerKill,ipcArgs) ; +} + +void RDemoCli::Done(TTime &time) +{ +// TPckgBuf buf(&time) ; +// TIpcArgs ipcArgs(&buf) ; + + TPckg buf(time) ; + TIpcArgs ipcArgs(&buf) ; + + SendReceive(EServerDone,ipcArgs) ; +} + +CConsoleBase *gConsole ; + +void TestDemoL() +{ + RDemoCli demoCli ; + + TTime time ; + gConsole = Console::NewL(_L("Demo"), TSize(KConsFullScreen, KConsFullScreen)) ; + + CleanupStack::PushL(gConsole) ; + + CCommandLineArguments* args = CCommandLineArguments::NewL() ; + CleanupStack::PushL(args) ; + + TPtrC command ; + command.Set(KNullDesC) ; + + if (args->Count() > 1) + { + command.Set(args->Arg(1)) ; + } + else + { + gConsole->Printf(_L("Usage: sysmondemocli [poke|kill|done|restart ]\n")) ; + } + + if (command.Compare(KRESTART) == 0) + { + + TBuf<10> modeBuf = args->Arg(2) ; + + TPtr8 data = modeBuf.Collapse() ; + + TLex8 txt8 = TLex8(const_cast (data.PtrZ())) ; + + TInt mode ; + txt8.Val(mode) ; + + TInt err = RestartSys::RestartSystem(mode) ; /* restart in a different mode */ + + User::Leave(err) ; + } + + + if (demoCli.Open() != KErrNone) + { + gConsole->Printf(_L("The SysMonDemo server is not there - bye\n")) ; + + gConsole->Printf(_L("Press any key to continue...\n")) ; + gConsole->Getch() ; + + User::Leave(KErrNone) ; + } + + CleanupClosePushL(demoCli) ; + + if (command.Compare(KPOKE) == 0) + { + demoCli.Poke(time) ; + gConsole->Printf(_L("The SysMonDemo server was last loaded at (local time):\n")) ; + TDateTime dt = time.DateTime() ; + gConsole->Printf(_L("Year %d Month %d Day %d Hour %d Min %d Sec %d\n"), dt.Year(), dt.Month(), dt.Day(), dt.Hour(), dt.Minute(), dt.Second()) ; + } + else if (command.Compare(KKILL) == 0) + { + demoCli.Kill(time) ; + gConsole->Printf(_L("The SysMonDemo server has been killed.\n")) ; + gConsole->Printf(_L("The time of death:\n")) ; + TDateTime dt = time.DateTime() ; + gConsole->Printf(_L("Year %d Month %d Day %d Hour %d Min %d Sec %d\n"), dt.Year(), dt.Month(), dt.Day(), dt.Hour(), dt.Minute(), dt.Second()) ; + + gConsole->Printf(_L("SysMon is going to reload SysMonDemo server soon.\n")) ; + } + else if (command.Compare(KDONE) == 0) + { + demoCli.Done(time) ; + gConsole->Printf(_L("Monitoring has been cancelled for SysMonDemo\n")) ; + gConsole->Printf(_L("The SysMonDemo server has been killed. But it won't be reloaded\n")) ; + gConsole->Printf(_L("The time of death:\n")) ; + TDateTime dt = time.DateTime() ; + gConsole->Printf(_L("Year %d Month %d Day %d Hour %d Min %d Sec %d\n"), dt.Year(), dt.Month(), dt.Day(), dt.Hour(), dt.Minute(), dt.Second()) ; + } + + + // User::After(10000000) ; // let the console stay for a while + + gConsole->Printf(_L("Press any key to continue...\n")) ; + gConsole->Getch() ; + + + CleanupStack::PopAndDestroy(&demoCli) ; + CleanupStack::PopAndDestroy(args) ; + CleanupStack::PopAndDestroy(gConsole) ; + + +} + + + +TInt E32Main() + { + __UHEAP_MARK; + + CTrapCleanup* cleanup=CTrapCleanup::New(); + + TInt err = KErrNone ; + +// for(;;) + { + TRAP(err, TestDemoL()); + + } + + + delete cleanup; + + __UHEAP_MARKEND; + + return (err); + } + +