diff -r 000000000000 -r e4d67989cc36 genericservices/taskscheduler/Test/MinimalTaskHandler/minimaltaskhandler.cpp --- /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 +#include +#include +#include +#include +#include + +// 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 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(&(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(); + }