TImgTrans.GetScanImg를 제공하는 Class입니다.
idTCPClient를 사용하여 서버측에 파일명을 송신하면
서버측에서는 파일을 /DataTemp 에 생성하여줍니다.
그러면 idFTP를 사용하여 그 파일을 받아오는 Class입니다.
그런데 idTCPClient가 서버측에 연결되면 바로 Connected함수가 실행되기때문에
문제가 발생됩니다. 파일을 다 받아 올때까지 기다린다음 Return되어야 하는데,
어떻게하면 될까요?
아래의 소스를 보신 후 아시는 분은 리플 달아주세요.
--------------------------------------------------------------------
unit Trans;
interface
uses
Forms,
ExtCtrls, SysUtils, Classes, Dialogs,
IdFTP, IDFTPCommon,
IdTCPClient;
type
TImgTrans = class
private
DocID : string;
idFTP : TidFTP;
idTCP : TidTCPClient;
PParent : TComponent;
procedure Connected(Sender: TObject);
procedure DisConnected(Sender: TObject);
public
function GetScanImg(aDocID: string; aParent: TComponent): string;
...
end;
implementation
{ TScanTCP }
function TImgTrans.GetScanImg(aDocID: string; aParent: TComponent): string;
begin
DocID := aDocID;
PParent := aParent;
idTCP := TIdTCPClient.Create(aParent);
idTCP.OnConnected := Connected;
idTCP.OnDisconnected := DisConnected;
idTCP.Host := '112.112.112.1';
idTCP.Port := 1594;
idTCP.Connect;
end;
procedure TImgTrans.Connected(Sender: TObject);
begin
idTCP.Write(docid);
idTCP.Disconnect;
idFTP := TidFTP.Create(PParent);
idFTP.Host := '112.112.112.1';
idFTP.Username := 'username';
idFTP.Password := 'password';
idFTP.Connect(True);
idFTP.ChangeDir('/DataTemp');
idFTP.TransferType := ftBinary;
idFTP.Get(docid, ('c:\emr\scantemp\' + docid));
idFTP.Delete(('DataTemp' + docid));
idFTP.Disconnect;
end;
procedure TImgTrans.DisConnected(Sender: TObject);
begin
PParent := nil;
idTCP.Free;
idFTP.Free;
end;
end.
|