📄 ftpcli.pas
字号:
FFctSet := []
else
FFctSet := [ftpFctQuit];
end;
ExtractMoreResults;
if ftpFctOpen in FFctSet then begin
FFctPrv := ftpFctOpen;
FFctSet := FFctSet - [FFctPrv];
OpenAsync;
Exit;
end;
if ftpFctUser in FFctSet then begin
FFctPrv := ftpFctUser;
FFctSet := FFctSet - [FFctPrv];
UserAsync;
Exit;
end;
if ftpFctPass in FFctSet then begin
FFctSet := FFctSet - [ftpFctPass];
if (FFctPrv <> ftpFctUser) or
((FfctPrv = ftpFctUser) and (FStatusCode = 331)) then begin
FFctPrv := ftpFctPass;
PassAsync;
Exit;
end;
end;
if ftpFctCwd in FFctSet then begin
FFctSet := FFctSet - [ftpFctCwd];
if Length(FHostDirName) > 0 then begin
FFctPrv := ftpFctCwd;
CwdAsync;
Exit;
end;
end;
if ftpFctCDup in FFctSet then begin
FFctPrv := ftpFctCDup;
FFctSet := FFctSet - [FFctPrv];
CDupAsync;
Exit;
end;
if ftpFctTypeSet in FFctSet then begin
FFctPrv := ftpFctTypeSet;
FFctSet := FFctSet - [FFctPrv];
TypeSetAsync;
Exit;
end;
if ftpFctPort in FFctSet then begin
FFctPrv := ftpFctPort;
FFctSet := FFctSet - [FFctPrv];
PortAsync;
Exit;
end;
if ftpFctRest in FFctSet then begin
FFctPrv := ftpFctRest;
FFctSet := FFctSet - [FFctPrv];
RestAsync;
Exit;
end;
if ftpFctGet in FFctSet then begin
if (FFctPrv <> ftpFctRest) or
(FResumeAt < 0) or
((FFctPrv = ftpFctRest) and (FStatusCode <> 350)) then
FResumeAt := 0;
FFctPrv := ftpFctGet;
FFctSet := FFctSet - [FFctPrv];
ExecGetAsync;
Exit;
end;
if ftpFctPut in FFctSet then begin
FFctPrv := ftpFctPut;
FFctSet := FFctSet - [FFctPrv];
ExecPutAsync;
Exit;
end;
if ftpFctAppend in FFctSet then begin
FFctPrv := ftpFctAppend;
FFctSet := FFctSet - [FFctPrv];
ExecAppendAsync;
Exit;
end;
if ftpFctDir in FFctSet then begin
FFctPrv := ftpFctDir;
FFctSet := FFctSet - [FFctPrv];
ExecDirAsync;
Exit;
end;
if ftpFctLs in FFctSet then begin
FFctPrv := ftpFctLs;
FFctSet := FFctSet - [FFctPrv];
ExecLsAsync;
Exit;
end;
if ftpFctSyst in FFctSet then begin
FFctPrv := ftpFctSyst;
FFctSet := FFctSet - [FFctPrv];
SystAsync;
Exit;
end;
if ftpFctMkd in FFctSet then begin
FFctPrv := ftpFctMkd;
FFctSet := FFctSet - [FFctPrv];
MkdAsync;
Exit;
end;
if ftpFctRmd in FFctSet then begin
FFctPrv := ftpFctRmd;
FFctSet := FFctSet - [FFctPrv];
RmdAsync;
Exit;
end;
if ftpFctRenFrom in FFctSet then begin
FFctPrv := ftpFctRenFrom;
FFctSet := FFctSet - [FFctPrv];
RenFromAsync;
Exit;
end;
if ftpFctRenTo in FFctSet then begin
FFctPrv := ftpFctRenTo;
FFctSet := FFctSet - [FFctPrv];
RenToAsync;
Exit;
end;
if ftpFctSize in FFctSet then begin
FFctPrv := ftpFctSize;
FFctSet := FFctSet - [FFctPrv];
SizeAsync;
Exit;
end;
if ftpFctDele in FFctSet then begin
FFctPrv := ftpFctDele;
FFctSet := FFctSet - [FFctPrv];
DeleAsync;
Exit;
end;
if ftpFctPwd in FFctSet then begin
FFctPrv := ftpFctPwd;
FFctSet := FFctSet - [FFctPrv];
PwdAsync;
Exit;
end;
if ftpFctQuote in FFctSet then begin
FFctPrv := ftpFctQuote;
FFctSet := FFctSet - [FFctPrv];
QuoteAsync;
Exit;
end;
if ftpFctQuit in FFctSet then begin
FFctPrv := ftpFctQuit;
FFctSet := FFctSet - [FFctPrv];
FLastResponseSave := FLastResponse;
FStatusCodeSave := FStatusCode;
QuitAsync;
Exit;
end;
{$IFDEF TRACE} TriggerDisplay('! HighLevelAsync done'); {$ENDIF}
FFctSet := [];
FNextRequest := nil;
FRequestDoneFlag := FALSE;
TriggerRequestDone(FHighLevelResult);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.HighLevelAsync(RqType : TFtpRequest; Fcts : TFtpFctSet);
begin
if FConnected and (ftpFctOpen in Fcts) then begin
HandleError('FTP component already connected');
Exit;
end;
if not CheckReady then
Exit;
FLastResponseSave := FLastResponse;
FStatusCodeSave := -1;
FRequestType := RqType;
FRequestResult := 0;
FFctSet := Fcts;
FFctPrv := ftpFctNone;
FHighLevelResult := 0;
FHighLevelFlag := TRUE;
FLastResponse := '';
FErrorMessage := '';
FRestartFlag := FALSE;
DoHighLevelAsync;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.ConnectAsync;
begin
HighLevelAsync(ftpConnectAsync, [ftpFctOpen, ftpFctUser, ftpFctPass]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.ReceiveAsync;
begin
HighLevelAsync(ftpReceiveAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctTypeSet, ftpFctPort, ftpFctGet, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.PutAsync;
begin
HighLevelAsync(ftpPutAsync,
[ftpFctPort, ftpFctPut]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.TransmitAsync;
begin
HighLevelAsync(ftpTransmitAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctTypeSet, ftpFctPort,
ftpFctPut, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.AppendAsync;
begin
HighLevelAsync(ftpAppendAsync,
[ftpFctPort, ftpFctAppend]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.AppendFileAsync;
begin
HighLevelAsync(ftpTransmitAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctTypeSet, ftpFctPort,
ftpFctAppend, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.DirAsync;
begin
HighLevelAsync(ftpDirAsync,
[ftpFctPort, ftpFctDir]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.DirectoryAsync;
begin
HighLevelAsync(ftpDirectoryAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctPort, ftpFctDir, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.LsAsync;
begin
HighLevelAsync(ftpLsAsync,
[ftpFctPort, ftpFctLs]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.ListAsync;
begin
HighLevelAsync(ftpListAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctPort, ftpFctLs, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.SystemAsync;
begin
HighLevelAsync(ftpSystemAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctSyst, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.RestartGetAsync;
begin
HighLevelAsync(ftpRestartGetAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass, ftpFctCwd,
ftpFctTypeSet, ftpFctRest, ftpFctPort, ftpFctGet,
ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.RestGetAsync;
begin
HighLevelAsync(ftpRestGetAsync,
[ftpFctRest, ftpFctPort, ftpFctGet]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.GetAsync;
begin
HighLevelAsync(ftpGetAsync,
[ftpFctPort, ftpFctGet]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.MkdirAsync;
begin
HighLevelAsync(ftpMkdirAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctMkd, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomFtpCli.RmdirAsync;
begin
HighLevelAsync(ftpRmdirAsync,
[ftpFctOpen, ftpFctUser, ftpFctPass,
ftpFctCwd, ftpFctRmd, ftpFctQuit]);
end;
{* * * * * * * * * * * * * * * * * *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -