Script.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. //---------------------------------------------------------------------------
  2. #ifndef ScriptH
  3. #define ScriptH
  4. //---------------------------------------------------------------------------
  5. #include <time.h>
  6. #include "Option.h"
  7. #include "Terminal.h"
  8. #include "FileOperationProgress.h"
  9. //---------------------------------------------------------------------------
  10. class TTerminal;
  11. class TScript;
  12. class TScriptCommands;
  13. class TStoredSessionList;
  14. class TTerminalList;
  15. //---------------------------------------------------------------------------
  16. class TScriptProgress
  17. {
  18. public:
  19. TFileOperation Operation;
  20. TOperationSide Side;
  21. UnicodeString FileName;
  22. UnicodeString Directory;
  23. unsigned int OverallProgress;
  24. unsigned int FileProgress;
  25. unsigned int CPS;
  26. };
  27. //---------------------------------------------------------------------------
  28. typedef void __fastcall (__closure *TScriptPrintEvent)(TScript * Script, const UnicodeString Str);
  29. typedef void __fastcall (__closure *TScriptSynchronizeStartStop)(TScript * Script,
  30. const UnicodeString LocalDirectory, const UnicodeString RemoteDirectory,
  31. const TCopyParamType & CopyParam, int SynchronizeParams);
  32. typedef void __fastcall (__closure *TScriptProgressEvent)(TScript * Script, const TScriptProgress & Progress);
  33. //---------------------------------------------------------------------------
  34. class TScriptProcParams : public TOptions
  35. {
  36. public:
  37. friend class TManagementScript;
  38. __fastcall TScriptProcParams(UnicodeString ParamsStr);
  39. __property UnicodeString ParamsStr = { read = FParamsStr };
  40. private:
  41. UnicodeString FParamsStr;
  42. };
  43. //---------------------------------------------------------------------------
  44. class TScript
  45. {
  46. public:
  47. enum TBatchMode { BatchOff, BatchOn, BatchAbort, BatchContinue };
  48. __fastcall TScript(bool LimitedOutput);
  49. virtual __fastcall ~TScript();
  50. void __fastcall Command(UnicodeString Cmd);
  51. void __fastcall Log(TLogLineType Type, AnsiString Str);
  52. void __fastcall PrintLine(const UnicodeString Str);
  53. void __fastcall Synchronize(const UnicodeString LocalDirectory,
  54. const UnicodeString RemoteDirectory, const TCopyParamType & CopyParam,
  55. int SynchronizeParams, TSynchronizeChecklist ** Checklist);
  56. __property TScriptPrintEvent OnPrint = { read = FOnPrint, write = FOnPrint };
  57. __property TExtendedExceptionEvent OnShowExtendedException = { read = FOnShowExtendedException, write = FOnShowExtendedException };
  58. __property TSynchronizeDirectory OnTerminalSynchronizeDirectory = { read = FOnTerminalSynchronizeDirectory, write = FOnTerminalSynchronizeDirectory };
  59. __property TScriptSynchronizeStartStop OnSynchronizeStartStop = { read = FOnSynchronizeStartStop, write = FOnSynchronizeStartStop };
  60. __property TScriptProgressEvent OnProgress = { read = FOnProgress, write = FOnProgress };
  61. __property TCopyParamType CopyParam = { read = FCopyParam, write = SetCopyParam };
  62. __property int SynchronizeParams = { read = FSynchronizeParams, write = SetSynchronizeParams };
  63. __property TBatchMode Batch = { read = FBatch };
  64. __property TTerminal * Terminal = { read = FTerminal };
  65. __property bool Groups = { read = FGroups, write = FGroups };
  66. __property bool WantsProgress = { read = FWantsProgress, write = FWantsProgress };
  67. protected:
  68. TTerminal * FTerminal;
  69. TScriptCommands * FCommands;
  70. TScriptPrintEvent FOnPrint;
  71. TExtendedExceptionEvent FOnShowExtendedException;
  72. TSynchronizeDirectory FOnTerminalSynchronizeDirectory;
  73. TScriptSynchronizeStartStop FOnSynchronizeStartStop;
  74. TScriptProgressEvent FOnProgress;
  75. TCopyParamType FCopyParam;
  76. bool FIncludeFileMaskOptionUsed;
  77. TBatchMode FBatch;
  78. bool FConfirm;
  79. bool FEcho;
  80. int FSynchronizeParams;
  81. int FSynchronizeMode;
  82. bool FKeepingUpToDate;
  83. UnicodeString FSynchronizeIntro;
  84. bool FLimitedOutput;
  85. int FSessionReopenTimeout;
  86. bool FGroups;
  87. bool FWantsProgress;
  88. TStrings * FPendingLogLines;
  89. virtual void __fastcall ResetTransfer();
  90. virtual void __fastcall ConnectTerminal(TTerminal * ATerminal);
  91. bool __fastcall EnsureCommandSessionFallback(
  92. TFSCapability Capability, TSessionAction & Action);
  93. void __fastcall Print(const UnicodeString Str);
  94. void __fastcall CheckSession();
  95. void __fastcall CheckParams(TScriptProcParams * Parameters);
  96. void __fastcall CopyParamParams(TCopyParamType & CopyParam, TScriptProcParams * Parameters);
  97. void __fastcall TransferParamParams(int & Params, TScriptProcParams * Parameters);
  98. enum TFileListType
  99. {
  100. fltDefault = 0x00,
  101. fltDirectories = 0x01,
  102. fltQueryServer = 0x02,
  103. fltMask = 0x04
  104. };
  105. TStrings * __fastcall CreateFileList(TScriptProcParams * Parameters, int Start,
  106. int End, TFileListType ListType = fltDefault);
  107. TStrings * __fastcall CreateLocalFileList(TScriptProcParams * Parameters,
  108. int Start, int End, TFileListType ListType);
  109. void __fastcall FreeFileList(TStrings * FileList);
  110. void __fastcall LogPendingLines(TTerminal * ATerminal);
  111. void __fastcall HelpProc(TScriptProcParams * Parameters);
  112. void __fastcall CallProc(TScriptProcParams * Parameters);
  113. void __fastcall PwdProc(TScriptProcParams * Parameters);
  114. void __fastcall CdProc(TScriptProcParams * Parameters);
  115. void __fastcall LsProc(TScriptProcParams * Parameters);
  116. void __fastcall RmProc(TScriptProcParams * Parameters);
  117. void __fastcall RmDirProc(TScriptProcParams * Parameters);
  118. void __fastcall MvProc(TScriptProcParams * Parameters);
  119. void __fastcall ChModProc(TScriptProcParams * Parameters);
  120. void __fastcall LnProc(TScriptProcParams * Parameters);
  121. void __fastcall MkDirProc(TScriptProcParams * Parameters);
  122. void __fastcall GetProc(TScriptProcParams * Parameters);
  123. void __fastcall PutProc(TScriptProcParams * Parameters);
  124. void __fastcall OptionProc(TScriptProcParams * Parameters);
  125. void __fastcall AsciiProc(TScriptProcParams * Parameters);
  126. void __fastcall BinaryProc(TScriptProcParams * Parameters);
  127. void __fastcall SynchronizeProc(TScriptProcParams * Parameters);
  128. void __fastcall KeepUpToDateProc(TScriptProcParams * Parameters);
  129. void __fastcall EchoProc(TScriptProcParams * Parameters);
  130. void __fastcall StatProc(TScriptProcParams * Parameters);
  131. void __fastcall OptionImpl(UnicodeString OptionName, UnicodeString ValueName);
  132. void __fastcall SynchronizeDirectories(TScriptProcParams * Parameters,
  133. UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int FirstParam);
  134. virtual bool __fastcall HandleExtendedException(Exception * E,
  135. TTerminal * Terminal = NULL);
  136. void __fastcall TerminalCaptureLog(const UnicodeString & AddedLine, bool StdError);
  137. virtual UnicodeString __fastcall GetLogCmd(const UnicodeString & FullCommand,
  138. const UnicodeString & Command, const UnicodeString & Params);
  139. void __fastcall SynchronizePreview(
  140. UnicodeString LocalDirectory, UnicodeString RemoteDirectory,
  141. TSynchronizeChecklist * Checklist);
  142. UnicodeString __fastcall SynchronizeFileRecord(
  143. const UnicodeString & RootDirectory, const TSynchronizeChecklist::TItem * Item,
  144. bool Local);
  145. private:
  146. void __fastcall Init();
  147. void __fastcall SetCopyParam(const TCopyParamType & value);
  148. void __fastcall SetSynchronizeParams(int value);
  149. TTransferMode __fastcall ParseTransferModeName(UnicodeString Name);
  150. inline bool __fastcall IsTerminalLogging(TTerminal * ATerminal);
  151. };
  152. //---------------------------------------------------------------------------
  153. typedef void __fastcall (__closure *TScriptInputEvent)(TScript * Script, const UnicodeString Prompt, UnicodeString & Str);
  154. typedef void __fastcall (__closure *TScriptQueryCancelEvent)(TScript * Script, bool & Cancel);
  155. typedef void __fastcall (__closure *TScriptPrintProgressEvent)(TScript * Script, bool First, const UnicodeString Str);
  156. //---------------------------------------------------------------------------
  157. class TManagementScript : public TScript
  158. {
  159. public:
  160. __fastcall TManagementScript(TStoredSessionList * StoredSessions, bool LimitedOutput);
  161. virtual __fastcall ~TManagementScript();
  162. void __fastcall Connect(const UnicodeString Session, TOptions * Options, bool CheckParams);
  163. void __fastcall ReflectSettings();
  164. __property TScriptInputEvent OnInput = { read = FOnInput, write = FOnInput };
  165. __property TScriptQueryCancelEvent OnQueryCancel = { read = FOnQueryCancel, write = FOnQueryCancel };
  166. __property TPromptUserEvent OnTerminalPromptUser = { read = FOnTerminalPromptUser, write = FOnTerminalPromptUser };
  167. __property TQueryUserEvent OnTerminalQueryUser = { read = FOnTerminalQueryUser, write = FOnTerminalQueryUser };
  168. __property TScriptPrintProgressEvent OnPrintProgress = { read = FOnPrintProgress, write = FOnPrintProgress };
  169. __property bool Continue = { read = FContinue };
  170. protected:
  171. TScriptInputEvent FOnInput;
  172. TScriptQueryCancelEvent FOnQueryCancel;
  173. TPromptUserEvent FOnTerminalPromptUser;
  174. TQueryUserEvent FOnTerminalQueryUser;
  175. TScriptPrintProgressEvent FOnPrintProgress;
  176. TStoredSessionList * FStoredSessions;
  177. TTerminalList * FTerminalList;
  178. UnicodeString FLastProgressFile;
  179. UnicodeString FLastProgressMessage;
  180. time_t FLastProgressTime;
  181. time_t FLastProgressEventTime;
  182. bool FContinue;
  183. virtual void __fastcall ResetTransfer();
  184. void __fastcall Input(const UnicodeString Prompt, UnicodeString & Str, bool AllowEmpty);
  185. void __fastcall TerminalInformation(TTerminal * Terminal, const UnicodeString & Str,
  186. bool Status, int Phase);
  187. void __fastcall TerminalOperationProgress(TFileOperationProgressType & ProgressData,
  188. TCancelStatus & Cancel);
  189. void __fastcall TerminalOperationFinished(TFileOperation Operation, TOperationSide Side,
  190. bool Temp, const UnicodeString & FileName, Boolean Success,
  191. TOnceDoneOperation & OnceDoneOperation);
  192. void __fastcall PrintActiveSession();
  193. TTerminal * __fastcall FindSession(const UnicodeString Index);
  194. void __fastcall FreeTerminal(TTerminal * Terminal);
  195. void __fastcall PrintProgress(bool First, const UnicodeString Str);
  196. bool __fastcall QueryCancel();
  197. void __fastcall TerminalSynchronizeDirectory(const UnicodeString LocalDirectory,
  198. const UnicodeString RemoteDirectory, bool & Continue, bool Collect);
  199. void __fastcall DoChangeLocalDirectory(UnicodeString Directory);
  200. void __fastcall DoClose(TTerminal * Terminal);
  201. virtual bool __fastcall HandleExtendedException(Exception * E,
  202. TTerminal * Terminal = NULL);
  203. void __fastcall TerminalPromptUser(TTerminal * Terminal, TPromptKind Kind,
  204. UnicodeString Name, UnicodeString Instructions, TStrings * Prompts,
  205. TStrings * Results, bool & Result, void * Arg);
  206. void __fastcall TerminalInitializeLog(TObject * Sender);
  207. inline bool __fastcall Synchronizing();
  208. inline void __fastcall ShowPendingProgress();
  209. virtual UnicodeString __fastcall GetLogCmd(const UnicodeString & FullCommand,
  210. const UnicodeString & Command, const UnicodeString & Params);
  211. void __fastcall ExitProc(TScriptProcParams * Parameters);
  212. void __fastcall OpenProc(TScriptProcParams * Parameters);
  213. void __fastcall CloseProc(TScriptProcParams * Parameters);
  214. void __fastcall SessionProc(TScriptProcParams * Parameters);
  215. void __fastcall LPwdProc(TScriptProcParams * Parameters);
  216. void __fastcall LCdProc(TScriptProcParams * Parameters);
  217. void __fastcall LLsProc(TScriptProcParams * Parameters);
  218. };
  219. //---------------------------------------------------------------------------
  220. #endif