AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy und Wiedervervendung von procedure
Thema durchsuchen
Ansicht
Themen-Optionen

Indy und Wiedervervendung von procedure

Ein Thema von hesch21 · begonnen am 28. Feb 2013 · letzter Beitrag vom 4. Mär 2013
Antwort Antwort
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Indy und Wiedervervendung von procedure

  Alt 28. Feb 2013, 15:26
Ich würde den gemeinsamen Code in eine (oder mehrere) Klasse(n) auslagern.
Diese Klasse(n) befindet sich wiederum in einer Unit, die von App und Service benützt wird.
Delphi-Quellcode:
TServerAblauf = class(TObject)
protected
  FServer : TIdTcpServer;
public
  constructor Create(server : TIdTcpServer);
  procedure Execute;
end;

constructor TServerAblauf.Create(server : TIdTcpServer);
begin
  inherited Create;
  FServer := server;
  // hier evtl. noch Events auf eigene Methoden richten
  FServer.OnDisconnect := self.DisconnectHandler;
end;

procedure TServerAblauf.Execute;
begin
  // dein Code
end;
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: Indy und Wiedervervendung von procedure

  Alt 1. Mär 2013, 08:43
Danke sx2008 für Deinen Tipp. Der Ansatz ist gut, nur...
Das OnExecute-Event vom Indy-TCPServer sieht wie folgt aus:
procedure IdTCPServerExecute(AContext: TIdContext); Wie komme ich jetzt nach Deiner Methode an den AContext?
Ich müsste doch irgendwie die procedure gar nicht bei der Klasse definieren sondern im Constructor das OnExecute-Event definieren, aber das schaffe ich wieder nicht.
Heinz Schneider
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.494 Beiträge
 
Delphi 12 Athens
 
#3

AW: Indy und Wiedervervendung von procedure

  Alt 1. Mär 2013, 10:24
Es ist vieleicht wichtig welche Indy-Version überhaupt verwendet wird.

Bei Indy-9 ist das Event so deklariert:
Delphi-Quellcode:
  TIdServerThreadEvent = procedure(AThread: TIdPeerThread) of object;
{...}
    property OnExecute: TIdServerThreadEvent read FOnExecute write FOnExecute;
Auf jeden Fall sind alle Events als "of object" vereinbart und erwarten damit die Methode einer Klasse. Also implementiere in deiner Klasse einfach die entsprechende Ereignismethode, so wie das Ereignis in deiner Version der Komponente definiert ist:
Delphi-Quellcode:
TServerAblauf = class(TObject)
protected
  FServer : TIdTcpServer;
  procedure DoExecute(AThread: TIdPeerThread);
public
  constructor Create(server : TIdTcpServer);
end;

constructor TServerAblauf.Create(server : TIdTcpServer);
begin
  inherited Create;
  FServer := server;
  // hier evtl. noch Events auf eigene Methoden richten
  FServer.OnExecute := DoExecute;
end;

procedure TServerAblauf.DoExecute(AThread: TIdPeerThread);
begin
  // Hier tun, was zu tun ist.

end;
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#4

AW: Indy und Wiedervervendung von procedure

  Alt 1. Mär 2013, 11:55
Hallo Blup

ich benutze Indy-10. da ist die Definition
Code:
TIdServerThreadEvent = procedure(AContext: TIdContext) of object;

  TIdServerContext = class(TIdContext)
  protected
    FServer: TIdCustomTCPServer;
  public
    property Server: TIdCustomTCPServer read FServer;
  end;

  TIdServerContextClass = class of TIdServerContext;


    // Occurs in the context of the peer thread
    property OnExecute: TIdServerThreadEvent read FOnExecute write FOnExecute;
Also muss ich doch nur folgendes anpassen:
Code:
TServerAblauf = class(TObject)
protected
  FServer : TIdTcpServer;
  procedure DoExecute(AThread: TIdContext);
public
  constructor Create(server : TIdTcpServer);
end;

constructor TServerAblauf.Create(server : TIdTcpServer);
begin
  inherited Create;
  FServer := server;
  // hier evtl. noch Events auf eigene Methoden richten
  FServer.OnExecute := DoExecute;
end;

procedure TServerAblauf.DoExecute(AThread: TIdContext);
begin
  // Hier tun, was zu tun ist.

end;
Ich hoffe, ich sehe das richtig. Werde das am Wochenende austesten. Leider komme ich heute nicht mehr dazu.
Heinz Schneider
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.153 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Indy und Wiedervervendung von procedure

  Alt 1. Mär 2013, 18:15
unter http://sourceforge.net/projects/indy10clieservr/ findest Du eine Shared Unit mit allen Funktionen zum Übertragen von Daten mit INDY , natürlich wegen reuse ausgelagert und geshared



( http://indy10clieservr.svn.sourcefor...04&view=markup )

Geändert von bernhard_LA ( 1. Mär 2013 um 18:22 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz