Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
ВнизКак защитить переменные в потоке? Найти похожие ветки
← →
Aleksandr (2002-03-21 16:47) [14]Продолжение:
{ TWebDataProcessor }
function TWebDataProcessor.SendFile(AFileName: string): boolean;
var
R : TRiHeader;
F : TFileStream;
s : string;
begin
Result:=false;
R:=nil;
try
R:=TRIHeader(GetFromFileStream(AFileName));
F:=nil;
if FileExists(R.TransName) then begin
FClient.Writeln(ExtractFileName(R.TransName));
s:=FClient.ReadLn;
if s=rsFileName then try
F:=TFileStream.Create(R.TransName,fmOpenRead OR fmShareDenyNone);
FClient.Writeln(IntToStr(F.Size));
s:=FClient.Readln;
if s=rsFileSize then begin
FClient.WriteStream(F);
s:=FClient.ReadLn;
if s=rsFileData then
Result:=true
else
AddLog("Error file data ok - "+R.TransName)
end
else
AddLog("Error file size ok - "+R.TransName)
finally
F.Free
end
else
AddLog("Error file name ok - "+R.TransName)
end
else
AddLog("File Not found - "+R.TransName)
finally
if Result then begin
DeleteFile(R.TransName);
DeleteFile(AFileName)
end
else if FBadDir<>"" then begin
DeleteFile(AFileName);
{$IFNDEF Remote}
MoveFileWithUnicName(R.TransName,FBadDir+ExtractFileName(R.TransName))
{$ENDIF}
end;
R.Free
end
end;
constructor TWebDataProcessor.Create;
begin
inherited Create(true);
FreeOnTerminate:=false;
FSleepInterval:=ASleepInterval;
FDir:=ADir;
FClient:=TIdTCPClient.Create(nil);
FClient.Port:=APort;
FClient.Host:=AHost;
FLogFileName:=CorrectPath(LogFilesDir)+WebStmLogFileName;
if FileExists(FLogFileName) then begin
FLogFile:=TFileStream.Create(FLogFileName,fmOpenReadWrite or fmShareDenyNone);
if FLogFile.Size>30000 then begin
FLogFile.Free;
FLogFile:=TFileStream.Create(FLogFileName,fmCreate);
end;
FLogFile.Free
end
else begin
FLogFile:=TFileStream.Create(FLogFileName,fmCreate);
FLogFile.Free
end;
FLogFile:=TFileStream.Create(FLogFileName,fmOpenReadWrite or fmShareDenyNone);
FLogFile.Seek(0,soFromEnd);
InitializeCriticalSection(WebSection1);
InitializeCriticalSection(FileSection1);
if NOT ASuspensed then
Resume
end;
procedure TWebDataProcessor.AddLog(Msg: string);
var
s : string;
P : Pointer;
begin
if NOT Assigned(FLogFile) then
Exit;
try
EnterCriticalSection(FileSection1);
if FLogFile.Size>30000 then begin
FlogFile.Free;
FLogFile:=TFileStream.Create(FLogFileName,fmCreate);
FLogFile.Free;
FLogFile:=TFileStream.Create(FLogFileName,fmOpenReadWrite or fmShareDenyNone)
end;
S:=DateTimeToStr(Now)+": "+Msg+#13#10;
P:=Pointer(s);
FLogFile.WriteBuffer(P^,length(S))
finally
LeaveCriticalSection(FileSection1)
end
end;
procedure TWebDataProcessor.Execute;
var
HeadersList : TList;
FData : PWin32FindData;
i : integer;
s : string;
begin
Sleep(0);
try
Repeat
HeadersList:=TList.Create;
if SearchFiles32(HeadersList,FDir+HeadersMask) then try
AddLog("Found file(s) to send - "+IntToStr(HeadersList.Count));
EnterCriticalSection(WebSection1);
for i:=0 to HeadersList.Count-1 do try
FData:=HeadersList.Items[i];
if NOT FClient.Connected then
FClient.Connect;
AddLog("Connected to remote...");
if FClient.Connected AND FileExists(CorrectPath(FDir)+ExtractFileName(FData.cFileName)) then begin
s:=CorrectPath(FDir)+ExtractFileName(FData.cFileName);
if SendFile(CorrectPath(FDir)+ExtractFileName(FData.cFileName)) then
AddLog("File sending successfully - "+s)
else
AddLog("File cannot sending - "+s)
end
else if NOT FClient.Connected then
AddLog("Connection unavailable");
if FClient.Connected then begin
AddLog("Disconnected to remote.");
FClient.DisConnect
end;
Dispose(FData);
finally
end
finally
LeaveCriticalSection(WebSection1);
end;
while HeadersList.Count>0 do
HeadersList.Delete(0);
HeadersList.Free;
Sleep(FSleepInterval);
until Terminated
except
on E:Exception do
AddLog("Exception in execute - "+E.Message)
end
end;
destructor TWebDataProcessor.Destroy;
begin
if Assigned(FClient) then
FClient.Free;
DeleteCriticalSection(WebSection1);
DeleteCriticalSection(FileSection1);
inherited
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c