also aufgerufen wird sie durch:
Code:
procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
{...}
begin
if not Working then
begin
//Variable setzen
Working := True;
//Cursor = Sanduhr
Screen.Cursor := crHourglass;
try
//Prüfen ob Datei schon vorhanden, wenn ja, löschen
If FileExists(SaveFile) then
DeleteFile(SaveFile);
ZielDatei := TFileStream.Create(SaveFile, fmCreate);
ProgressBar_Update.Position := 0;
pbReceived := fSize;
//Datei empfangen und speichern
while True do
begin
nReceived := Socket.ReceiveBuf(Buffer, sizeof(Buffer));
if nReceived <= 0 then
Break
else
ZielDatei.WriteBuffer(Buffer, nReceived);
Sleep(300);
pbReceived := pbReceived - nReceived;
ProgressBar_Update.Position := 100 - ((pbReceived * 100) div fSize);
Application.ProcessMessages;
end;
ZielDatei.Position := 0;
finally
FreeAndNil(zielDatei);
end;
//Cursor = Normal
Screen.Cursor := crDefault;
//Prüfen ob die angekommene Datei die Größe der Original-Datei hat
If FileExists(SaveFile) and (GetFileSize(SaveFile) = fSize) then
begin
//Variable löschen
Buffer := '';
//Kommando senden
Socket.SendText('GOTFILE!');
//TrayIcon beschreiben
TrayIcon.Icon := IconRot;
If New_Client_Update then
begin
//Timer Update enablen
Timer_Update.Enabled := true;
//Label beschreiben
LabelTimer_Update_Info.TimeOutEnabled := false;
LabelTimer_Update_Info.Caption :=
'Update wurde empfangen und wird jetzt installiert!';
Label_Date_Time.Caption :=
FormatDateTime('d. mmmm yyyy hh:mm:ss', Now) + ' Uhr';
end
else
begin
//Timer Update disablen
Timer_Update.Enabled := false;
//Progressbar wieder auf 0 setzen
ProgressBar_Update.Position := 0;
//Label beschreiben
LabelTimer_Update_Info.TimeOutEnabled := true;
LabelTimer_Update_Info.Caption := 'Datei wurde übertragen!';
end;
end
else
begin
//Timer Update disablen
Timer_Update.Enabled := false;
//Progressbar wieder auf 0 setzen
ProgressBar_Update.Position := 0;
//Variable löschen
Buffer := '';
//Datei löschen
DeleteFile(SaveFile);
//Label beschreiben
LabelTimer_Update_Info.TimeOutEnabled := true;
LabelTimer_Update_Info.Caption :=
'Fehler beim Empfangen der Datei!';
//Kommando senden
Socket.SendText('FILEERROR!');
end;
//Umschalten auf Kommando-Empfang
ClientStatus := csIdle;
//Variable beschreiben
Working := False;
end;
mit der Variablen Working wird ja das zweimal-Aufrufen verhindert