sysstatemgmt/systemstarter/test/sysmondemo/src/sysmondemocli.cpp
changeset 0 4e1aa6a622a0
--- /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<TTime*> buf(&time) ;	
+//	TIpcArgs ipcArgs(&buf) ;	
+
+	TPckg<TTime> buf(time) ;
+	TIpcArgs ipcArgs(&buf) ;	
+	
+	SendReceive(EServerPoke,ipcArgs) ;			
+}
+
+void RDemoCli::Kill(TTime &time)
+{
+//	TPckgBuf<TTime*> buf(&time) ;	
+//	TIpcArgs ipcArgs(&buf) ;	
+
+	TPckg<TTime> buf(time) ;
+	TIpcArgs ipcArgs(&buf) ;	
+	
+	SendReceive(EServerKill,ipcArgs) ;	
+}
+
+void RDemoCli::Done(TTime &time)
+{
+//	TPckgBuf<TTime*> buf(&time) ;	
+//	TIpcArgs ipcArgs(&buf) ;	
+
+	TPckg<TTime> 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 <mode>]\n")) ;
+	}
+
+	if (command.Compare(KRESTART) == 0)
+	{
+	
+		TBuf<10> modeBuf = args->Arg(2) ;
+		
+		TPtr8 data = modeBuf.Collapse() ;
+		
+		TLex8 txt8 = TLex8(const_cast<TUint8*> (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);
+	}
+
+