AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

Ein Thema von hsbc · begonnen am 25. Jul 2006 · letzter Beitrag vom 15. Dez 2008
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 27. Jul 2006, 19:01
Allerdings... denn OnWork muss ja nicht pro Byte feuern! Ich nehme mal an, BytesZuSenden ist die Größe seiner Datei, die er uploaden will.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#12

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 27. Jul 2006, 19:41
BytesZuSenden ist die Grösse der Datei in Bytes. Dies funktioniert beim Download einwandfrei.

Natürlich habe ich auch schon AWorkCountMax anstatt BytesZuSenden versucht, mit dem gleichen Erfolg.

Nochmals: Das Ereignis OnWork wird beim Upload überhaupt nicht ausgeführt, beim Download sehr wohl. Dies muss in Indy 10 blockiert sein, in Indy 9 hingegen funktioniert das.

Hat vielleicht jemand eine E-Mail-Adresse von irgendeinem Indy-Entwickler, damit ich dort einfach mal die Frage stellen kann, warum dies in Indy 10 nicht mehr funktioniert.

mfg
Herbert
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 27. Jul 2006, 19:44
Schau doch mal in den Sourcecode. Du solltest anhand der Getter/Setter von OnWork das entsprechende Feld finden und einen eventuellen Aufruf. Vielleicht ist ja tatsächlich nur der Setter kaputt?! Einfach mal ein bisschen debuggen
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#14

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 27. Jul 2006, 19:49
Zitat von hsbc:
Nochmals: Das Ereignis OnWork wird beim Upload überhaupt nicht ausgeführt, beim Download sehr wohl. Dies muss in Indy 10 blockiert sein, in Indy 9 hingegen funktioniert das.
Wieso bist du dir da überhaupt so sicher ? In deinem Code-Fizelchen ist jedenfalls kein Fehler zu entdecken. Aber vielleicht kann man dir ja doch noch ein bisschen mehr entlocken. Und wenn du der festen Überzeugung bist, dass die ach so schrottreifen Indys schuld sind, warum frägst du denn dann uns Wir können doch auch nichts dafür

  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#15

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 27. Jul 2006, 20:39
@DGL-luke

Was bedeutet Getter/Setter ???

Man müsste halt wissen, wo im Quellcode der Aufruf von OnWork stattfindet, bzw. ob dieser überhaupt stattfindet.

mfg
Herbert
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 27. Jul 2006, 21:33
Aus der IdComponent (Indy 9)
property OnWork: TWorkEvent read FOnWork write FOnWork; Hier ist FOnWork einmal der Getter und Setter.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#17

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 28. Jul 2006, 08:02
@Meflin

Zitat von Meflin:
Wieso bist du dir da überhaupt so sicher
Ich bin mir deswegen sicher, weil ich probeweise in meine OnWork-Behandlungsroutine ein ShowMessage eingebaut habe und diese wird nur beim Download und nicht beim Upload angezeigt.

Zitat von Meflin:
In deinem Code-Fizelchen ist jedenfalls kein Fehler zu entdecken. Aber vielleicht kann man dir ja doch noch ein bisschen mehr entlocken.
Du brauchst mir nur zu sagen, welche Code-Teile ich dir noch schicken soll. Aber mehr relevante Teile gibt es dazu nicht.

Zitat von Meflin:
Und wenn du der festen Überzeugung bist, dass die ach so schrottreifen Indys schuld sind, warum frägst du denn dann uns Wir können doch auch nichts dafür
Das ist mir schon klar, dass ihr auch nichts dafür könnt. Meine Frage stelle ich hier in dieses Forum deswegen, weil vielleicht doch schon jemand mit Indy 10 Erfahrung gemacht hat und dasselbe Problem hatte. Im Internet selbst habe ich leider diesbezüglich keinerlei Hinweise gefunden.

Mir wäre ev. auch geholfen, wenn ich eine E-Mail-Adresse von einem Indy-Entwickler erfahren könnte. Auch hier schweigt sich die Indy-Seite zur Gänze aus.

mfg
Herbert
  Mit Zitat antworten Zitat
Benutzerbild von DeluxXx
DeluxXx

Registriert seit: 3. Jul 2006
92 Beiträge
 
#18

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 28. Jul 2006, 09:05
Schlag mich grade mit dem Selben Problem rum

Delphi-Quellcode:
procedure TForm1.IdFTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
  ProgressBar1.Position := 0;
end;
und
Delphi-Quellcode:
procedure TForm1.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  //Aktualisieren der Fortschrittsanzeige:
  ProgressBar1.Position := AWorkCount;
end;
Upload Funktioniert aber eben die progressbar nicht
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 28. Jul 2006, 09:27
Könnte Ihr mal überprüfen ob die Methode InternalPut aus der idFTP.pas
mit diese mehr oder weniger übereinstimmt, diese ist von Indy 9:
Vielleicht hilft es ja dem Fehler auf die Schliche zu kommen.


Delphi-Quellcode:
procedure TIdFTP.InternalPut(const ACommand: string; ASource: TStream; AFromBeginning: Boolean = true);
var
  LIP: string;
  LPort: Integer;
  LResponse: Integer;
begin
  DoStatus(ftpTransfer, [RSFTPStatusStartTransfer]); try
    if FPassive then begin
      SendPassive(LIP, LPort);
      WriteLn(ACommand);
      FDataChannel := TIdTCPClient.Create(nil);
      with TIdTCPClient(FDataChannel) do try
        if (Self.IOHandler is TIdIOHandlerSocket) then begin
          if not assigned(IOHandler) then begin
            IOHandler:=TIdIOHandlerSocket.create(nil);
          end;
          TIdIOHandlerSocket(IOHandler).SocksInfo.Assign(TIdIOHandlerSocket(Self.IOHandler).SocksInfo);
          TIdIOHandlerSocket(IOHandler).SocksInfo.IOHandler:=IOHandler;
        end;
        InitDataChannel;
        Host := LIP;
        Port := LPort;
        Connect;
        try
          Self.GetResponse([110, 125, 150]);
          try
            WriteStream(ASource, {false}AFromBeginning);
          except
            on E: EIdSocketError do begin
              // If 10038 - abort was called. Server will return 225
              if E.LastError <> 10038 then begin
                raise;
              end;
            end;
          end;
        finally Disconnect; end;
      finally FDataChannel.IOHandler.free; FDataChannel.IOHandler:=nil; FreeAndNil(FDataChannel); end;
    end else begin
      FDataChannel := TIdSimpleServer.Create(nil); try
        with TIdSimpleServer(FDataChannel) do begin
          InitDataChannel;
          BoundIP := (Self.IOHandler as TIdIOHandlerSocket).Binding.IP;
          BoundPort := Self.DataPort;
          BoundPortMin := Self.DataPortMin;
          BoundPortMax := Self.DataPortMax;
          BeginListen;
          SendPort(Binding);
          Self.SendCmd(ACommand, [125, 150]);
          Listen;
          WriteStream(ASource, AFromBeginning);
        end;
      finally FreeAndNil(FDataChannel); end;
    end;
  finally
    DoStatus(ftpReady, [RSFTPStatusDoneTransfer]);
  end;
  // 226 = download successful, 225 = Abort successful}
  LResponse := GetResponse([225, 226, 250, 426, 450]);
  if (LResponse = 426) or (LResponse = 450) then begin
    // some servers respond with 226 on ABOR
    GetResponse([226, 225]);
    DoStatus(ftpAborted, [RSFTPStatusAbortTransfer]);
  end;
end;

procedure TIdFTP.InitDataChannel;
begin
  FDataChannel.SendBufferSize := SendBufferSize;
  FDataChannel.RecvBufferSize := RecvBufferSize;
  FDataChannel.OnWork := OnWork;
  FDataChannel.OnWorkBegin := OnWorkBegin;
  FDataChannel.OnWorkEnd := OnWorkEnd;
end;
Grüße
Klaus

[edit] habe gerade festgestellt, daß dies hier nicht die große Hilfe ist, da idFTP wohl sehr große
Veränderungen erfahren hat. [/edit]
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeluxXx
DeluxXx

Registriert seit: 3. Jul 2006
92 Beiträge
 
#20

Re: Indy 10 - Progressbar arbeitet nicht mehr mit OnWork

  Alt 28. Jul 2006, 09:50
Hat jmd zufällig ein Tool zum Vergleichen von 2 Source Codes =P
Delphi-Quellcode:
procedure TIdFTP.InternalPut(const ACommand: string; ASource: TIdStream; AFromBeginning: Boolean = true);
var
  LIP: string;
  LPort: Integer;
  LPasvCl : TIdTCPClient;
  LPortSv : TIdSimpleServer;


begin
  FAbortFlag.Value := False;
  //for SSL FXP, we have to do it here because there is no command were a client
  //submits data through a data port where the SSCN setting is ignored.
  ClearSSCN;
  DoStatus(ftpTransfer, [RSFTPStatusStartTransfer]);
  try
    if FPassive then begin
      SendPret(ACommand);
      if FUsingExtDataPort then begin
        SendEPassive(LIP, LPort);
      end else begin
        SendPassive(LIP, LPort);
      end;
      IOHandler.WriteLn(ACommand);
      FDataChannel := TIdTCPClient.Create(nil);
      LPasvCl := TIdTCPClient(FDataChannel);
      try
        InitDataChannel;
        LPasvCl.Host := LIP;
        LPasvCl.Port := LPort;
        if Assigned(FOnDataChannelCreate) then begin
          OnDataChannelCreate(self,FDataChannel);
        end;
        LPasvCl.Connect;
        try
          Self.GetResponse([110, 125, 150]);
          try
            if FUsingSFTP and (FDataPortProtection = ftpdpsPrivate) then begin
               TIdSSLIOHandlerSocketBase(FDataChannel.IOHandler).Passthrough := False;
            end;
            if FCurrentTransferMode<>dmDeflate then begin
              if AFromBeginning then begin
                FDataChannel.IOHandler.Write(ASource,0, false); // from beginning
              end else begin
                FDataChannel.IOHandler.Write(ASource,-1, false); // from current position
              end;
            end else begin
              FCompressor.CompressFTPToIO(ASource,FDataChannel.IOHandler,FZLibCompressionLevel,FZLibWindowBits,FZLibMemLevel, FZLibStratagy);
            end;
          except
            on E: EIdSocketError do
            begin
              // If 10038 - abort was called. Server will return 225
              if E.LastError <> 10038 then begin
                raise;
              end;
            end;
          end;
        finally
          LPasvCl.Disconnect;
        end;
      finally
        FinalizeDataOperation;
      end;
    end else begin
      FDataChannel := TIdSimpleServer.Create(nil);
      LPortSv := TIdSimpleServer(FDataChannel);
      try
        InitDataChannel;

        LPortSv.BoundIP := (Self.IOHandler as TIdIOHandlerSocket).Binding.IP;
        LPortSv.BoundPort := FDataPort;
        LPortSv.BoundPortMin := FDataPortMin;
        LPortSv.BoundPortMax := FDataPortMax;

        if Assigned(FOnDataChannelCreate) then begin
          OnDataChannelCreate(Self, FDataChannel);
        end;

        LPortSv.BeginListen;
        if FUsingExtDataPort then begin
          SendEPort(LPortSv.Binding);
        end else begin
          SendPort(LPortSv.Binding);
        end;
        Self.SendCmd(ACommand, [125, 150]);

        LPortSv.Listen;
        if FUsingSFTP and (FDataPortProtection = ftpdpsPrivate) then begin
          TIdSSLIOHandlerSocketBase(FDataChannel.IOHandler).PassThrough := False;
        end;

        if FCurrentTransferMode<>dmDeflate then begin
          if AFromBeginning then begin
            FDataChannel.IOHandler.Write(ASource,0, false); // from beginning
          end else begin
            FDataChannel.IOHandler.Write(ASource,-1, false); // from current position
          end;
        end else begin
          FCompressor.CompressFTPToIO(ASource,FDataChannel.IOHandler,FZLibCompressionLevel,FZLibWindowBits,FZLibMemLevel, FZLibStratagy);
        end;
      finally
         FinalizeDataOperation;
      end;
    end;
  except
    //Note that you are likely to get an exception you abort a transfer
    //hopefully, this will make things work better.
    on E: EIdConnClosedGracefully do
    begin
      if not (E is EIdConnClosedGracefully) then
      begin
        raise;
      end;
    end;
  end;

{ commented out because we might need to revert back to this
  if new code fails.
  if (LResponse = 426) or (LResponse = 450) then
  begin
    // some servers respond with 226 on ABOR
    GetResponse([226, 225]);
    DoStatus(ftpAborted, [RSFTPStatusAbortTransfer]);
  end;
  }

end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz