diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/taskexecutor_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/taskexecutor_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,153 @@ + +
+00001 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +00002 // All rights reserved. +00003 // This component and the accompanying materials are made available +00004 // under the terms of "Eclipse Public License v1.0" +00005 // which accompanies this distribution, and is available +00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". +00007 // +00008 // Initial Contributors: +00009 // Nokia Corporation - initial contribution. +00010 // +00011 // Contributors: +00012 // +00013 // Description: +00014 // This is simple code that executes the task scheduled by the task scheduler. +00015 // The code also checks if the task requester has the required capability. +00016 // This window belongs to the task scheduled to execute by the main program. +00017 // It shows the details of the task information passed by the Task Scheduler +00018 // to the executed program. +00019 // +00020 +00021 +00022 +00026 #include <schtask.h> +00027 #include <e32cons.h> +00028 +00029 _LIT(KTaskConsoleName, "TaskExecutor"); +00030 _LIT(KContent,"\nContents of task file:\n"); +00031 _LIT(KTask,"\nRunning task: %S"); +00032 _LIT(KTaskData,"\nThis is the task data for a"); +00033 _LIT(KTaskId,"\nThe task Id is: %d\n"); +00034 _LIT(KValidity,"Task is valid until %S\n"); +00035 _LIT(KDateString,"%H%:1%T %*E%*D%X%*N%Y %1 %2 %3"); +00036 _LIT(KPressAnyKey,"Press any key to continue \n"); +00037 _LIT(KAbort,"\nCapabilities of the task scheduler and the executor do not match. Task aborted\n"); +00038 _LIT(KSidMismatch,"SID of the task executor is not same as that of the scheduler. Task aborted\n"); +00039 // Uid of the task requester +00040 const TUint32 KTaskSchedulerSid = 0xE80000B5; +00041 const TCapability KTaskCapability = ECapabilityWriteDeviceData; +00042 +00049 void TaskExecuteL(RFile& aTaskFile) +00050 { +00051 // Construct console +00052 CConsoleBase* console = Console::NewL(KTaskConsoleName, TSize(KConsFullScreen, KConsFullScreen)); +00053 CleanupStack::PushL(console); +00054 console->Printf(KContent); +00055 +00056 // Open the filestore +00057 CFileStore* store = CDirectFileStore::FromLC(aTaskFile);//pushes store onto CleanupStack +00058 RStoreReadStream instream; +00059 +00060 // Open the file containing the store +00061 instream.OpenLC(*store,store->Root());//pushes instream onto CleanupStack +00062 +00063 // Get task count +00064 TInt count = instream.ReadInt32L(); +00065 for (TInt i=0;i<count;i++) +00066 { +00067 CScheduledTask* task = CScheduledTask::NewLC(instream); //pushes task onto CleanupStack +00068 +00069 // Check if this is the SID of task requester +00070 if(task->SecurityInfo().iSecureId == KTaskSchedulerSid) +00071 { +00072 +00073 // Check if the requester has the necessary capability to run +00074 // the scheduled tasks. +00075 if(task->SecurityInfo().iCaps.HasCapability(KTaskCapability)) +00076 { +00077 TBuf<50> buf; +00078 buf.Format(KTask, &task->Info().iName); +00079 console->Printf(buf); +00080 +00081 HBufC* data = const_cast<HBufC*>(&(task->Data())); +00082 +00083 console->Printf(KTaskData); +00084 console->Printf(*data); +00085 +00086 console->Printf(KTaskId,task->Info().iTaskId); +00087 +00088 // Get the time when the task stops being valid +00089 TTsTime tstime = task->ValidUntil(); +00090 const TTime time = tstime.GetLocalTime(); +00091 TBuf<30> dateString; +00092 time.FormatL(dateString,(KDateString)); +00093 console->Printf(KValidity, &dateString); +00094 } +00095 else +00096 { +00097 console->Printf(KAbort); +00098 } +00099 } +00100 else +00101 { +00102 console->Printf(KSidMismatch); +00103 } +00104 console->Printf(KPressAnyKey); +00105 console->Getch(); +00106 +00107 CleanupStack::PopAndDestroy(task); +00108 +00109 } +00110 +00111 CleanupStack::PopAndDestroy(3); // instream, store, console +00112 } +00113 +00114 +00115 TInt Execute() +00116 { +00117 TInt err = KErrNoMemory; +00118 CTrapCleanup* cleanup = CTrapCleanup::New(); +00119 if (cleanup) +00120 { +00121 RFile file; +00122 +00123 // Needs to be called early-on to allow the task scheduler server +00124 // to adopt the already open task file from the task scheduler +00125 err = file.AdoptFromCreator(TScheduledTaskFile::FsHandleIndex(), +00126 TScheduledTaskFile::FileHandleIndex()); +00127 if (err != KErrNone) +00128 { +00129 return err; +00130 } +00131 +00132 // Execute +00133 TRAPD(err,TaskExecuteL(file)); +00134 if(err != KErrNone) +00135 { +00136 User::Panic(_L("Failed to complete"),err); +00137 } +00138 +00139 // Close the file +00140 file.Close(); +00141 delete cleanup; +00142 } +00143 return err; +00144 } +00145 +00146 +00147 GLDEF_C TInt E32Main() +00148 { +00149 return Execute(); +00150 } +