--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/taskscheduler/Test/MinimalTaskHandler/minimaltaskhandler.cpp Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,133 @@
+// Copyright (c) 2000-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 <schinfo.h>
+#include <schinfointernal.h>
+#include <schtask.h>
+#include <s32file.h>
+#include <e32math.h>
+#include <e32cons.h>
+
+// Constants
+_LIT(KMinimalTaskConsoleName, "MinimalTaskExecutor");
+
+static void SignalTestExe()
+ {
+ _LIT(KSchSemaphoreName, "SCHMinimalTaskHandler");
+ RSemaphore sem;
+ TInt ret = sem.OpenGlobal(KSchSemaphoreName);
+ if (ret == KErrNone)
+ {
+ sem.Signal();
+ sem.Close();
+ }
+ }
+
+//***********************************************************************************
+LOCAL_D TInt GetRandomNumber(const TInt aLow, const TInt aHigh, TInt64& aSeed)
+ {
+ TReal initialRand = (Math::FRand(aSeed) * (aHigh - aLow));
+ TInt32 rand;
+
+ // Round to 0 decimal places, ie. the nearest whole numer
+ Math::Round(initialRand, initialRand, 0);
+ Math::Int(rand, initialRand);
+
+ return (aLow + rand);
+ }
+
+//***********************************************************************************
+LOCAL_D void ConstructConsoleL(RFile& aTaskFile)
+ {
+ CConsoleBase* console=Console::NewL(KMinimalTaskConsoleName, TSize(KConsFullScreen, KConsFullScreen));
+ CleanupStack::PushL(console);
+ console->Printf(_L(" contents of task file\n"));
+
+ CFileStore* store;
+ // Open the filestore
+ store = CDirectFileStore::FromLC(aTaskFile);//pushes store
+ RStoreReadStream instream;
+ instream.OpenLC(*store,store->Root());//pushes instream
+
+ // Get task count
+ TInt count = instream.ReadInt32L();
+ for (TInt i=0;i<count;i++)
+ {
+ CScheduledTask* task = CScheduledTask::NewLC(instream);
+
+ TBuf<150> buf;
+ buf.Format(_L("Running task \"%S\""), &task->Info().iName);
+ User::LeaveIfError(User::InfoPrint(buf));
+
+ console->Printf(task->Info().iName);
+ console->Printf(_L("\n"));
+ HBufC* data = const_cast<HBufC*>(&(task->Data()));
+ console->Printf(*data);
+ console->Printf(_L("\n"));
+ console->Printf(_L("%d \n"),task->Info().iTaskId);
+ TTsTime tstime = task->ValidUntil();
+ const TTime time = tstime.GetLocalTime();
+ TBuf<30> dateString;
+ time.FormatL(dateString,(_L("%H%:1%T%*E%*D%X%*N%Y %1 %2 %3")));
+ console->Printf(_L(":%S\n"), &dateString);
+ CleanupStack::PopAndDestroy(task);
+ }
+ console->Printf(_L("Pausing for a one second..."));
+ User::After(1000000);
+ CleanupStack::PopAndDestroy(3); //console, store, instream
+ }
+
+
+//***********************************************************************************
+LOCAL_D TInt Execute()
+ {
+ TInt err = KErrNoMemory;
+ CTrapCleanup* cleanup=CTrapCleanup::New(); //can fail
+ if (cleanup)
+ {
+ RFile file;
+
+ // Adopt the task file from the Task Scheduler
+ err = file.AdoptFromCreator(TScheduledTaskFile::FsHandleIndex(),
+ TScheduledTaskFile::FileHandleIndex());
+ if (err != KErrNone)
+ return err;
+
+ // The aParam is the name of a file where the relevant CTaskExCmdLine is
+ // do the executing
+ TRAPD(err, ConstructConsoleL(file));
+ if(err == KErrNone)
+ {
+ // Sometimes we want to return a bogus error value,
+ // sometimes we don't.
+ TTime now;
+ now.HomeTime();
+ TInt64 seed = now.Int64();
+ err = GetRandomNumber(-50, 200, seed); //20% chance of error being returned
+ }
+
+ file.Close();// Close the file
+ delete cleanup;
+ }
+ SignalTestExe();
+ return err;
+ }
+
+
+//***********************************************************************************
+GLDEF_C TInt E32Main()
+ {
+ return Execute();
+ }