--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/taskscheduler/SCHSVR/SCHEDULE.H Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,183 @@
+// Copyright (c) 2004-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:
+// class TScheduledTask
+// -a task which has been scheduled with a schedule
+// -maintains non-owning pointer to proxy for client which scheduled it
+// class CSchedule
+// -has >=1 entries, >=0 tasks
+// -when one of its entries is due, all its tasks are due
+//
+//
+
+#ifndef __SCHEDULE_H__
+#define __SCHEDULE_H__
+
+// System includes
+#include <e32base.h>
+
+// Forward Declarations
+class CFileStore;
+class TStreamId;
+class TScheduleEntry;
+class TScheduleEntryInfo2;
+class TScheduleInfo;
+class TScheduledTask;
+class CScheduledTask;
+class CClientProxy;
+class TTaskInfo;
+class RWriteStream;
+class CConditionManager;
+class TTaskSchedulerCondition;
+
+//#include <schinfo.h>
+#include <schinfointernal.h>
+#include "CSCHCODE.H" //opcodes
+/**
+Constants
+@internalComponent
+*/
+const TInt KScheduleIdDifferential=10000;
+
+/**
+@internalComponent
+*/
+class TScheduledTask
+ {
+public:
+ TScheduledTask(CScheduledTask& aTask, CClientProxy& iClient);
+
+ // ??
+ void OnDue(const TTsTime& iValidUntil);
+
+ // Access data
+ const HBufC& Data() const;
+ const TTaskInfo& Info() const;
+ const CClientProxy& Client() const;
+
+ // Ask client to remove & delete the TTaskInfo member
+ void RemoveInfo();
+ void DecRepeat();
+
+ // For queue support
+ static TInt Offset();
+
+private:
+ CScheduledTask& iTask;//doesn't own this: the client does
+ CClientProxy& iClient;//doesn't own this: CTaskScheduler owns all clients
+ TSglQueLink iLink;
+ };
+
+/**
+@internalComponent
+*/
+NONSHARABLE_CLASS(CSchedule) : public CBase
+ {
+public:
+ static CSchedule* NewLC(TInt aHandle,
+ const TDesC& aName,
+ TBool aPersists,
+ const CArrayFixFlat<TScheduleEntryInfo2>& aEntries,
+ const TSecurityInfo& aSecurityInfo);
+ static CSchedule* NewLC(TInt aHandle,
+ const TDesC& aName,
+ TBool aPersists,
+ const CArrayFixFlat<TTaskSchedulerCondition>& aEntries,
+ const TTsTime& aDefaultRunTime,
+ const TSecurityInfo& aSecurityInfo);
+ static CSchedule* NewL(CFileStore& aStore, TStreamId& aId);
+ ~CSchedule();
+
+private:
+ void ConstructL(const TDesC& aName,
+ const CArrayFixFlat<TScheduleEntryInfo2>& aEntries);
+ void ConstructL(const TDesC& aName,
+ const CArrayFixFlat<TTaskSchedulerCondition>& aEntries,
+ const TTsTime& aDefaultRunTime);
+ void RestoreL(CFileStore& aStore, TStreamId& aId);
+ CSchedule();
+ CSchedule(const TSecurityInfo& aSecurityInfo, TInt aHandle, TBool aPersists);
+
+private:
+ void AddEntriesL(const CArrayFixFlat<TScheduleEntryInfo2>& aEntries);
+ TTsTime ValidUntil() const; //from base class
+ void AddConditionsL(const CArrayFixFlat<TTaskSchedulerCondition>& aConditions);
+
+public:
+ // externalize/internalize
+ void InternalizeL(RReadStream& aReadStream);
+ void ExternalizeL(RWriteStream& aWriteStream) const;
+ //call this whenever schedule becomes due: tells tasks they need to be executed
+ void NotifyTasks();
+ // called whenever a schedule changes. If aNotFirstTime = ETrue then this means
+ // the schedule has just run so we need a minor modification to the next due time calculation
+ void CalculateDueTime(TBool aNotFirstTime = EFalse);
+ //Time entries
+ void ReplaceEntriesL(const CArrayFixFlat<TScheduleEntryInfo2>& aEntries);
+ void EntriesL(CArrayFixFlat<TScheduleEntryInfo2>& aEntries);
+ void GetInfo(TScheduleInfo& aInfo, TBool aCalculateForConditions);
+ inline const TTsTime& DueTime() const;
+ //Condition entries
+ void ReplaceConditionsL(const CArrayFixFlat<TTaskSchedulerCondition>& aConditions);
+ void ConditionsL(CArrayFixFlat<TTaskSchedulerCondition>& aConditions);
+ const TTsTime& DefaultRunTimeL() const;
+ //editing
+ void AddTask(TScheduledTask& aTask);
+ void RemoveTask(TScheduledTask* aTask);
+ void RemoveTasks(TBool aFromClient);
+ TInt GenerateTaskId();
+ TScheduledTask* Task(const TInt aTaskId);
+ //accessors
+ void RemoveEntries();
+ void RemoveConditions();
+
+ TBool ClientInSchedule(const TDesC& aClientName);
+ inline TSglQue<TScheduledTask>* Tasks();
+ void TasksL(CArrayFixFlat<TTaskInfo>& aTasks);
+ inline TInt Id() const;
+ inline const TDesC& Name() const;
+ inline TBool Persists() const;
+ inline TBool Enabled() const;
+ inline void SetEnabled(TBool aEnabled);
+ inline TBool HasTasks() const;
+ inline TScheduleType Type() const;
+ const RArray<TTaskSchedulerCondition>& Conditions() const;
+
+ //security Info related stuff
+ TBool IsAccessAllowed(const RMessagePtr2& aMessage) const;
+ inline void CheckAccessAllowedL(const RMessagePtr2& aMessage) const;
+
+ const TSecurityInfo& SecurityInfo() const;
+ //list capability
+ static TInt Offset();
+ TBool IsUpdatable();
+
+private://data
+ TSglQueLink iLink; //scheduler keeps all schedules in owning queue
+ TInt iId;
+ HBufC* iName;
+ TBool iPersists;
+ TBool iEnabled;
+ TTsTime iDueTime;
+ TTimeIntervalMinutes iValidityPeriod;
+ // list handling
+ RArray<TTaskSchedulerCondition> iConditions;
+ TSglQue<TScheduledTask> iTaskList; //things which happen at those times
+ mutable TSglQue<TScheduleEntry> iEntryList; //list of times at which things happen
+
+ //Creating process SecurityInfo
+ TSecurityInfo iSecurityInfo;
+ };
+
+#include "SCHEDULE.INL"
+#endif