| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 | 
							- //---------------------------------------------------------------------------
 
- #ifndef QueueH
 
- #define QueueH
 
- //---------------------------------------------------------------------------
 
- #include "Terminal.h"
 
- #include "FileOperationProgress.h"
 
- //---------------------------------------------------------------------------
 
- class TSimpleThread
 
- {
 
- public:
 
-   __fastcall TSimpleThread();
 
-   virtual __fastcall ~TSimpleThread();
 
-   virtual void __fastcall Start();
 
-   void __fastcall WaitFor(unsigned int Milliseconds = INFINITE);
 
-   virtual void __fastcall Terminate() = 0;
 
-   void __fastcall Close();
 
-   bool __fastcall IsFinished();
 
- protected:
 
-   HANDLE FThread;
 
-   TThreadID FThreadId;
 
-   bool FFinished;
 
-   virtual void __fastcall Execute() = 0;
 
-   virtual void __fastcall Finished();
 
-   static int __fastcall ThreadProc(void * Thread);
 
- };
 
- //---------------------------------------------------------------------------
 
- class TSignalThread : public TSimpleThread
 
- {
 
- public:
 
-   virtual void __fastcall Start();
 
-   virtual void __fastcall Terminate();
 
-   void __fastcall TriggerEvent();
 
- protected:
 
-   HANDLE FEvent;
 
-   bool FTerminated;
 
-   __fastcall TSignalThread(bool LowPriority);
 
-   virtual __fastcall ~TSignalThread();
 
-   virtual bool __fastcall WaitForEvent();
 
-   int __fastcall WaitForEvent(unsigned int Timeout);
 
-   virtual void __fastcall Execute();
 
-   virtual void __fastcall ProcessEvent() = 0;
 
- };
 
- //---------------------------------------------------------------------------
 
- class TTerminal;
 
- class TQueueItem;
 
- class TTerminalQueue;
 
- class TQueueItemProxy;
 
- class TTerminalQueueStatus;
 
- //---------------------------------------------------------------------------
 
- typedef void __fastcall (__closure * TQueueListUpdate)
 
-   (TTerminalQueue * Queue);
 
- typedef void __fastcall (__closure * TQueueItemUpdateEvent)
 
-   (TTerminalQueue * Queue, TQueueItem * Item);
 
- enum TQueueEvent { qeEmpty, qeEmptyButMonitored, qePendingUserAction };
 
- typedef void __fastcall (__closure * TQueueEventEvent)
 
-   (TTerminalQueue * Queue, TQueueEvent Event);
 
- //---------------------------------------------------------------------------
 
- class TTerminalQueue : public TSignalThread
 
- {
 
- friend class TQueueItem;
 
- friend class TQueueItemProxy;
 
- public:
 
-   __fastcall TTerminalQueue(TTerminal * Terminal, TConfiguration * Configuration);
 
-   virtual __fastcall ~TTerminalQueue();
 
-   void __fastcall AddItem(TQueueItem * Item);
 
-   TTerminalQueueStatus * __fastcall CreateStatus(TTerminalQueueStatus * Current);
 
-   void __fastcall Idle();
 
-   __property bool IsEmpty = { read = GetIsEmpty };
 
-   __property int TransfersLimit = { read = FTransfersLimit, write = SetTransfersLimit };
 
-   __property int KeepDoneItemsFor = { read = FKeepDoneItemsFor, write = SetKeepDoneItemsFor };
 
-   __property bool Enabled = { read = FEnabled, write = SetEnabled };
 
-   __property TQueryUserEvent OnQueryUser = { read = FOnQueryUser, write = FOnQueryUser };
 
-   __property TPromptUserEvent OnPromptUser = { read = FOnPromptUser, write = FOnPromptUser };
 
-   __property TExtendedExceptionEvent OnShowExtendedException = { read = FOnShowExtendedException, write = FOnShowExtendedException };
 
-   __property TQueueListUpdate OnListUpdate = { read = FOnListUpdate, write = FOnListUpdate };
 
-   __property TQueueItemUpdateEvent OnQueueItemUpdate = { read = FOnQueueItemUpdate, write = FOnQueueItemUpdate };
 
-   __property TQueueEventEvent OnEvent = { read = FOnEvent, write = FOnEvent };
 
- protected:
 
-   friend class TTerminalItem;
 
-   friend class TQueryUserAction;
 
-   friend class TPromptUserAction;
 
-   friend class TShowExtendedExceptionAction;
 
-   TQueryUserEvent FOnQueryUser;
 
-   TPromptUserEvent FOnPromptUser;
 
-   TExtendedExceptionEvent FOnShowExtendedException;
 
-   TQueueItemUpdateEvent FOnQueueItemUpdate;
 
-   TQueueListUpdate FOnListUpdate;
 
-   TQueueEventEvent FOnEvent;
 
-   TTerminal * FTerminal;
 
-   TConfiguration * FConfiguration;
 
-   TSessionData * FSessionData;
 
-   TList * FItems;
 
-   TList * FDoneItems;
 
-   int FItemsInProcess;
 
-   TCriticalSection * FItemsSection;
 
-   int FFreeTerminals;
 
-   TList * FTerminals;
 
-   TList * FForcedItems;
 
-   int FTemporaryTerminals;
 
-   int FOverallTerminals;
 
-   int FTransfersLimit;
 
-   int FKeepDoneItemsFor;
 
-   bool FEnabled;
 
-   TDateTime FIdleInterval;
 
-   TDateTime FLastIdle;
 
-   inline static TQueueItem * __fastcall GetItem(TList * List, int Index);
 
-   inline TQueueItem * __fastcall GetItem(int Index);
 
-   void __fastcall FreeItemsList(TList * List);
 
-   void __fastcall UpdateStatusForList(
 
-     TTerminalQueueStatus * Status, TList * List, TTerminalQueueStatus * Current);
 
-   bool __fastcall ItemGetData(TQueueItem * Item, TQueueItemProxy * Proxy);
 
-   bool __fastcall ItemProcessUserAction(TQueueItem * Item, void * Arg);
 
-   bool __fastcall ItemMove(TQueueItem * Item, TQueueItem * BeforeItem);
 
-   bool __fastcall ItemExecuteNow(TQueueItem * Item);
 
-   bool __fastcall ItemDelete(TQueueItem * Item);
 
-   bool __fastcall ItemPause(TQueueItem * Item, bool Pause);
 
-   bool __fastcall ItemSetCPSLimit(TQueueItem * Item, unsigned long CPSLimit);
 
-   bool __fastcall ItemGetCPSLimit(TQueueItem * Item, unsigned long & CPSLimit);
 
-   void __fastcall RetryItem(TQueueItem * Item);
 
-   void __fastcall DeleteItem(TQueueItem * Item, bool CanKeep);
 
-   virtual bool __fastcall WaitForEvent();
 
-   virtual void __fastcall ProcessEvent();
 
-   void __fastcall TerminalFinished(TTerminalItem * TerminalItem);
 
-   bool __fastcall TerminalFree(TTerminalItem * TerminalItem);
 
-   void __fastcall DoQueueItemUpdate(TQueueItem * Item);
 
-   void __fastcall DoListUpdate();
 
-   void __fastcall DoEvent(TQueueEvent Event);
 
-   void __fastcall SetTransfersLimit(int value);
 
-   void __fastcall SetKeepDoneItemsFor(int value);
 
-   void __fastcall SetEnabled(bool value);
 
-   bool __fastcall GetIsEmpty();
 
- };
 
- //---------------------------------------------------------------------------
 
- class TQueueItem
 
- {
 
- friend class TTerminalQueue;
 
- friend class TTerminalItem;
 
- public:
 
-   enum TStatus {
 
-     qsPending, qsConnecting, qsProcessing, qsPrompt, qsQuery, qsError,
 
-     qsPaused, qsDone };
 
-   struct TInfo
 
-   {
 
-     TFileOperation Operation;
 
-     TOperationSide Side;
 
-     UnicodeString Source;
 
-     UnicodeString Destination;
 
-     UnicodeString ModifiedLocal;
 
-     UnicodeString ModifiedRemote;
 
-     bool SingleFile;
 
-   };
 
-   static bool __fastcall IsUserActionStatus(TStatus Status);
 
-   __property TStatus Status = { read = GetStatus };
 
-   __property HANDLE CompleteEvent = { read = FCompleteEvent, write = FCompleteEvent };
 
- protected:
 
-   TStatus FStatus;
 
-   TCriticalSection * FSection;
 
-   TTerminalItem * FTerminalItem;
 
-   TFileOperationProgressType * FProgressData;
 
-   TQueueItem::TInfo * FInfo;
 
-   TTerminalQueue * FQueue;
 
-   HANDLE FCompleteEvent;
 
-   long FCPSLimit;
 
-   TDateTime FDoneAt;
 
-   __fastcall TQueueItem();
 
-   virtual __fastcall ~TQueueItem();
 
-   void __fastcall SetStatus(TStatus Status);
 
-   TStatus __fastcall GetStatus();
 
-   void __fastcall Execute(TTerminalItem * TerminalItem);
 
-   virtual void __fastcall DoExecute(TTerminal * Terminal) = 0;
 
-   void __fastcall SetProgress(TFileOperationProgressType & ProgressData);
 
-   void __fastcall GetData(TQueueItemProxy * Proxy);
 
-   void __fastcall SetCPSLimit(unsigned long CPSLimit);
 
-   unsigned long __fastcall GetCPSLimit();
 
-   virtual unsigned long __fastcall DefaultCPSLimit();
 
-   virtual UnicodeString __fastcall StartupDirectory() = 0;
 
-   void __fastcall Complete();
 
- };
 
- //---------------------------------------------------------------------------
 
- class TQueueItemProxy
 
- {
 
- friend class TQueueItem;
 
- friend class TTerminalQueueStatus;
 
- friend class TTerminalQueue;
 
- public:
 
-   bool __fastcall Update();
 
-   bool __fastcall ProcessUserAction();
 
-   bool __fastcall Move(bool Sooner);
 
-   bool __fastcall Move(TQueueItemProxy * BeforeItem);
 
-   bool __fastcall ExecuteNow();
 
-   bool __fastcall Delete();
 
-   bool __fastcall Pause();
 
-   bool __fastcall Resume();
 
-   bool __fastcall SetCPSLimit(unsigned long CPSLimit);
 
-   bool __fastcall GetCPSLimit(unsigned long & CPSLimit);
 
-   __property TFileOperationProgressType * ProgressData = { read = GetProgressData };
 
-   __property __int64 TotalTransferred = { read = GetTotalTransferred };
 
-   __property TQueueItem::TInfo * Info = { read = FInfo };
 
-   __property TQueueItem::TStatus Status = { read = FStatus };
 
-   __property bool ProcessingUserAction = { read = FProcessingUserAction };
 
-   __property int Index = { read = GetIndex };
 
-   __property void * UserData = { read = FUserData, write = FUserData };
 
- private:
 
-   TFileOperationProgressType * FProgressData;
 
-   TQueueItem::TStatus FStatus;
 
-   TTerminalQueue * FQueue;
 
-   TQueueItem * FQueueItem;
 
-   TTerminalQueueStatus * FQueueStatus;
 
-   TQueueItem::TInfo * FInfo;
 
-   bool FProcessingUserAction;
 
-   void * FUserData;
 
-   __fastcall TQueueItemProxy(TTerminalQueue * Queue, TQueueItem * QueueItem);
 
-   virtual __fastcall ~TQueueItemProxy();
 
-   int __fastcall GetIndex();
 
-   TFileOperationProgressType * __fastcall GetProgressData();
 
-   __int64 __fastcall GetTotalTransferred();
 
- };
 
- //---------------------------------------------------------------------------
 
- class TTerminalQueueStatus
 
- {
 
- friend class TTerminalQueue;
 
- friend class TQueueItemProxy;
 
- public:
 
-   virtual __fastcall ~TTerminalQueueStatus();
 
-   TQueueItemProxy * __fastcall FindByQueueItem(TQueueItem * QueueItem);
 
-   __property int Count = { read = GetCount };
 
-   __property int DoneCount = { read = FDoneCount };
 
-   __property int ActiveCount = { read = GetActiveCount };
 
-   __property int DoneAndActiveCount = { read = GetDoneAndActiveCount };
 
-   __property int ActiveAndPendingCount = { read = GetActiveAndPendingCount };
 
-   __property TQueueItemProxy * Items[int Index] = { read = GetItem };
 
- protected:
 
-   __fastcall TTerminalQueueStatus();
 
-   void __fastcall Add(TQueueItemProxy * ItemProxy);
 
-   void __fastcall Delete(TQueueItemProxy * ItemProxy);
 
-   void __fastcall ResetStats();
 
- private:
 
-   TList * FList;
 
-   int FDoneCount;
 
-   int FActiveCount;
 
-   int __fastcall GetCount();
 
-   int __fastcall GetActiveCount();
 
-   int __fastcall GetDoneAndActiveCount();
 
-   int __fastcall GetActiveAndPendingCount();
 
-   void __fastcall SetDoneCount(int Value);
 
-   TQueueItemProxy * __fastcall GetItem(int Index);
 
- };
 
- //---------------------------------------------------------------------------
 
- class TLocatedQueueItem : public TQueueItem
 
- {
 
- protected:
 
-   __fastcall TLocatedQueueItem(TTerminal * Terminal);
 
-   virtual void __fastcall DoExecute(TTerminal * Terminal);
 
-   virtual UnicodeString __fastcall StartupDirectory();
 
- private:
 
-   UnicodeString FCurrentDir;
 
- };
 
- //---------------------------------------------------------------------------
 
- class TTransferQueueItem : public TLocatedQueueItem
 
- {
 
- public:
 
-   __fastcall TTransferQueueItem(TTerminal * Terminal,
 
-     TStrings * FilesToCopy, const UnicodeString & TargetDir,
 
-     const TCopyParamType * CopyParam, int Params, TOperationSide Side,
 
-     bool SingleFile);
 
-   virtual __fastcall ~TTransferQueueItem();
 
- protected:
 
-   TStrings * FFilesToCopy;
 
-   UnicodeString FTargetDir;
 
-   TCopyParamType * FCopyParam;
 
-   int FParams;
 
-   virtual unsigned long __fastcall DefaultCPSLimit();
 
- };
 
- //---------------------------------------------------------------------------
 
- class TUploadQueueItem : public TTransferQueueItem
 
- {
 
- public:
 
-   __fastcall TUploadQueueItem(TTerminal * Terminal,
 
-     TStrings * FilesToCopy, const UnicodeString & TargetDir,
 
-     const TCopyParamType * CopyParam, int Params, bool SingleFile);
 
- protected:
 
-   virtual void __fastcall DoExecute(TTerminal * Terminal);
 
- };
 
- //---------------------------------------------------------------------------
 
- class TDownloadQueueItem : public TTransferQueueItem
 
- {
 
- public:
 
-   __fastcall TDownloadQueueItem(TTerminal * Terminal,
 
-     TStrings * FilesToCopy, const UnicodeString & TargetDir,
 
-     const TCopyParamType * CopyParam, int Params, bool SingleFile);
 
- protected:
 
-   virtual void __fastcall DoExecute(TTerminal * Terminal);
 
- };
 
- //---------------------------------------------------------------------------
 
- class TUserAction;
 
- class TTerminalThread : public TSignalThread
 
- {
 
- public:
 
-   __fastcall TTerminalThread(TTerminal * Terminal);
 
-   virtual __fastcall ~TTerminalThread();
 
-   void __fastcall TerminalOpen();
 
-   void __fastcall TerminalReopen();
 
-   void __fastcall Cancel();
 
-   void __fastcall Idle();
 
-   __property TNotifyEvent OnIdle = { read = FOnIdle, write = FOnIdle };
 
-   __property bool Cancelling = { read = FCancel };
 
- protected:
 
-   virtual void __fastcall ProcessEvent();
 
- private:
 
-   TTerminal * FTerminal;
 
-   TInformationEvent FOnInformation;
 
-   TQueryUserEvent FOnQueryUser;
 
-   TPromptUserEvent FOnPromptUser;
 
-   TExtendedExceptionEvent FOnShowExtendedException;
 
-   TDisplayBannerEvent FOnDisplayBanner;
 
-   TNotifyEvent FOnChangeDirectory;
 
-   TReadDirectoryEvent FOnReadDirectory;
 
-   TNotifyEvent FOnStartReadDirectory;
 
-   TReadDirectoryProgressEvent FOnReadDirectoryProgress;
 
-   TNotifyEvent FOnInitializeLog;
 
-   TNotifyEvent FOnIdle;
 
-   TNotifyEvent FAction;
 
-   HANDLE FActionEvent;
 
-   TUserAction * FUserAction;
 
-   Exception * FException;
 
-   Exception * FIdleException;
 
-   bool FCancel;
 
-   bool FCancelled;
 
-   bool FPendingIdle;
 
-   DWORD FMainThread;
 
-   TCriticalSection * FSection;
 
-   void __fastcall WaitForUserAction(TUserAction * UserAction);
 
-   void __fastcall RunAction(TNotifyEvent Action);
 
-   static void __fastcall SaveException(Exception & E, Exception *& Exception);
 
-   static void __fastcall Rethrow(Exception *& Exception);
 
-   void __fastcall FatalAbort();
 
-   void __fastcall CheckCancel();
 
-   void __fastcall TerminalOpenEvent(TObject * Sender);
 
-   void __fastcall TerminalReopenEvent(TObject * Sender);
 
-   void __fastcall TerminalInformation(
 
-     TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase);
 
-   void __fastcall TerminalQueryUser(TObject * Sender,
 
-     const UnicodeString Query, TStrings * MoreMessages, unsigned int Answers,
 
-     const TQueryParams * Params, unsigned int & Answer, TQueryType Type, void * Arg);
 
-   void __fastcall TerminalPromptUser(TTerminal * Terminal, TPromptKind Kind,
 
-     UnicodeString Name, UnicodeString Instructions,
 
-     TStrings * Prompts, TStrings * Results, bool & Result, void * Arg);
 
-   void __fastcall TerminalShowExtendedException(TTerminal * Terminal,
 
-     Exception * E, void * Arg);
 
-   void __fastcall TerminalDisplayBanner(TTerminal * Terminal,
 
-     UnicodeString SessionName, const UnicodeString & Banner,
 
-     bool & NeverShowAgain, int Options);
 
-   void __fastcall TerminalChangeDirectory(TObject * Sender);
 
-   void __fastcall TerminalReadDirectory(TObject * Sender, Boolean ReloadOnly);
 
-   void __fastcall TerminalStartReadDirectory(TObject * Sender);
 
-   void __fastcall TerminalReadDirectoryProgress(TObject * Sender, int Progress, int ResolvedLinks, bool & Cancel);
 
-   void __fastcall TerminalInitializeLog(TObject * Sender);
 
- };
 
- //---------------------------------------------------------------------------
 
- #endif
 
 
  |