Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdPeerThread in Indy 10 (https://www.delphipraxis.net/119570-tidpeerthread-indy-10-a.html)

STS301 28. Aug 2008 12:34


TIdPeerThread in Indy 10
 
hi

ich versuche gerade das OS Projekt von DataCool in Indy 10 umschreiben, ich habe aber ein Problem beim empfangen.
Delphi-Quellcode:
procedure TfrmMainServer.TcpServerExecute(AThread: TIdPeerThread); //<-- in Indy 10 steht (AContext: TIdContext)
Var sClientMsg : String;
    FileReceiver : TFileReceiver; //diese Definietion kommt von der Filereceiver Unit
begin
   try
      // Clientnachricht lesen
      sClientMsg := AThread.Connection.ReadLn(#$A,5500);
      FileReceiver := TFileReceiver.Create(AThread,sClientMsg);
      try
         // gültige Nachricht vom Client ?
         if FileReceiver.ServerMsgOK then begin
            // Datei jetzt empfangen
            if FileReceiver.Start then
               // Bestätigung zum Clientschreiben
               AThread.Connection.WriteLn('FILEOK')
            else
               // Error-Nachricht schreiben
               AThread.Connection.WriteLn('FILEERROR');
         end;
      finally
         FileReceiver.free;
      end;
   except
      AThread.Connection.Disconnect;
   end;
end;
mein Problem ist es, dass es in indy 10 keinen IdPeerthread mehr gibt, sondern idContext.

in der Filereceiver unit wird der idPeerthread jedoch benötigt

Delphi-Quellcode:
type

   TFileReceiver = Class
      private
         ..
         fLabRe : TLabel;
         // Indy-Server-Thread
         AThread : TIdPeerThread; // <-- hier
         // wichtige Elemente zum Empfangen der Datei
         iFileSize : Cardinal;
         ...
      protected
         //
      public
         ..
   end;
nur wenn ich statt AThread: TIdPeerThread, AContext: TIdContext hineinschreibe bringt das nicht wirklich zum Erfolg.

wie kann ich das Umschreiben oder kennt jemand eine bessere Lösung mit dem selben Ergebnis?

Bitte fragen, falls etwas unverständlich ist

bronxy1337 26. Jul 2010 12:11

AW: TIdPeerThread in Indy 10
 
Guten Morgen!

Ich habe das selbe Problem, beide Varianten ausgetestet, undeklarierte Bezeichnungen. Verwende auch Indy 10.

Gruß
bronxy1337

DataCool 26. Jul 2010 13:16

AW: TIdPeerThread in Indy 10
 
Hallo zusammen,

TIdPeerThread muss durch TIdContext ersetzt werden; uses um IdContext erweitern .

Außerdem muss im SourceCode wie folgt vorgegangen werden damit es dann auch wieder unter Indy10 klappt:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
Var sClientMsg : String;
    FileReceiver : TFileReceiver; //diese Definietion kommt von der Filereceiver Unit
begin
  try
    // Clientnachricht lesen
    sClientMsg := AContext.Connection.Socket.ReadLn(#$A,5500);
    FileReceiver := TFileReceiver.Create(AContext,sClientMsg);
    try
       // gültige Nachricht vom Client ?
       if FileReceiver.ServerMsgOK then begin
          // Datei jetzt empfangen
          if FileReceiver.Start then
             // Bestätigung zum Clientschreiben
             AContext.Connection.Socket.WriteLn('FILEOK')
          else
             // Error-Nachricht schreiben
             AContext.Connection.Socket.WriteLn('FILEERROR');
       end;
    finally
       FileReceiver.free;
    end;
  except
   AContext.Connection.Disconnect;
  end;
end;
Also im Prinzip jede Deklaration von TIdPeerThread durch TIdContext austauschen.
Überall wo geschriebe/gelesen wird AThread.Connection mit AContext.Connection.Socket ersetzen und
dort wo eine Verbindung geschlossen werden soll AThread.Connection.Disconnect mit AContext.Connection.Disconect ersetzen.

Das war jetzt die Variante/Umsetzung für den Indy TCP-Server mit Indy10,
Umsetzung/Portierung des Clients sollte sich daraus ableiten lassen.

Mfg DataCool


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 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