| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- //---------------------------------------------------------------------------
- #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;
- 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();
- virtual __fastcall ~TSignalThread();
- bool __fastcall WaitForEvent();
- virtual void __fastcall Execute();
- virtual void __fastcall ProcessEvent() = 0;
- };
- //---------------------------------------------------------------------------
- class TTerminal;
- class TQueueItem;
- class TCriticalSection;
- 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, 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 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;
- int FItemsInProcess;
- TCriticalSection * FItemsSection;
- int FFreeTerminals;
- TList * FTerminals;
- int FTemporaryTerminals;
- int FOverallTerminals;
- int FTransfersLimit;
- TDateTime FIdleInterval;
- TDateTime FLastIdle;
- TQueueItem * __fastcall GetItem(int Index);
- 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);
- void __fastcall RetryItem(TQueueItem * Item);
- void __fastcall DeleteItem(TQueueItem * Item);
- virtual void __fastcall ProcessEvent();
- void __fastcall TerminalFinished(TTerminalItem * TerminalItem);
- bool __fastcall TerminalFree(TTerminalItem * TerminalItem);
- void __fastcall DoQueryUser(TObject * Sender, const AnsiString Query,
- TStrings * MoreMessages, int Answers, const TQueryParams * Params, int & Answer,
- TQueryType Type, void * Arg);
- void __fastcall DoPromptUser(TTerminal * Terminal, TPromptKind Kind,
- AnsiString Name, AnsiString Instructions, TStrings * Prompts,
- TStrings * Results, bool & Result, void * Arg);
- void __fastcall DoShowExtendedException(TTerminal * Terminal,
- Exception * E, void * Arg);
- void __fastcall DoQueueItemUpdate(TQueueItem * Item);
- void __fastcall DoListUpdate();
- void __fastcall DoEvent(TQueueEvent Event);
- void __fastcall SetTransfersLimit(int 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;
- AnsiString Source;
- AnsiString Destination;
- AnsiString ModifiedLocal;
- AnsiString ModifiedRemote;
- };
- 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;
- __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);
- virtual AnsiString __fastcall StartupDirectory() = 0;
- };
- //---------------------------------------------------------------------------
- class TQueueItemProxy
- {
- friend class TQueueItem;
- friend class TTerminalQueueStatus;
- friend class TTerminalQueue;
- public:
- bool __fastcall Update();
- bool __fastcall ProcessUserAction(void * Arg = NULL);
- 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);
- __property TFileOperationProgressType * ProgressData = { read = GetProgressData };
- __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();
- };
- //---------------------------------------------------------------------------
- class TTerminalQueueStatus
- {
- friend class TTerminalQueue;
- friend class TQueueItemProxy;
- public:
- virtual __fastcall ~TTerminalQueueStatus();
- TQueueItemProxy * __fastcall FindByQueueItem(TQueueItem * QueueItem);
- __property int Count = { read = GetCount };
- __property int ActiveCount = { read = GetActiveCount };
- __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 FActiveCount;
- int __fastcall GetCount();
- int __fastcall GetActiveCount();
- TQueueItemProxy * __fastcall GetItem(int Index);
- };
- //---------------------------------------------------------------------------
- class TLocatedQueueItem : public TQueueItem
- {
- protected:
- __fastcall TLocatedQueueItem(TTerminal * Terminal);
- virtual void __fastcall DoExecute(TTerminal * Terminal);
- virtual AnsiString __fastcall StartupDirectory();
- private:
- AnsiString FCurrentDir;
- };
- //---------------------------------------------------------------------------
- class TTransferQueueItem : public TLocatedQueueItem
- {
- public:
- __fastcall TTransferQueueItem(TTerminal * Terminal,
- TStrings * FilesToCopy, const AnsiString & TargetDir,
- const TCopyParamType * CopyParam, int Params, TOperationSide Side);
- virtual __fastcall ~TTransferQueueItem();
- protected:
- TStrings * FFilesToCopy;
- AnsiString FTargetDir;
- TCopyParamType * FCopyParam;
- int FParams;
- };
- //---------------------------------------------------------------------------
- class TUploadQueueItem : public TTransferQueueItem
- {
- public:
- __fastcall TUploadQueueItem(TTerminal * Terminal,
- TStrings * FilesToCopy, const AnsiString & TargetDir,
- const TCopyParamType * CopyParam, int Params);
- protected:
- virtual void __fastcall DoExecute(TTerminal * Terminal);
- };
- //---------------------------------------------------------------------------
- class TDownloadQueueItem : public TTransferQueueItem
- {
- public:
- __fastcall TDownloadQueueItem(TTerminal * Terminal,
- TStrings * FilesToCopy, const AnsiString & TargetDir,
- const TCopyParamType * CopyParam, int Params);
- protected:
- virtual void __fastcall DoExecute(TTerminal * Terminal);
- };
- //---------------------------------------------------------------------------
- #endif
|