AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy AContext.Data Zugriff disconnect
Thema durchsuchen
Ansicht
Themen-Optionen

Indy AContext.Data Zugriff disconnect

Ein Thema von Delphi-Narr · begonnen am 10. Apr 2013 · letzter Beitrag vom 10. Apr 2013
Antwort Antwort
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Indy AContext.Data Zugriff disconnect

  Alt 10. Apr 2013, 18:56
Hallo,

ich arbeite derzeit an einem weitreichenden System, bei dem als eine externe Komponente ein Geflecht aus Client - Serververbindungen (TCP) notwendig ist.
Dies habe ich bisher alles mit Delphi realisiert und es klappt soweit auch alles.
Das einzige Problem ist die eindeutige Identifikation der Clients. Diese MUSS für das restliche System über die Macadresse des Clients laufen, welche dieser in einem Record nach der Anmeldung am Server
auch erfolgreich an diesen sendet.
Die Macadresse soll dann in AContext.Data gespeichert werden.
Serverseitiger Code:
OnConnect:
AContext.Data:=TClientIdentifier.Create; Bei TClientIdentifier handelt es sich um eine Klasse von TObject die als einzige Definition mac:string; besitzt.

OnExecute:
Delphi-Quellcode:
if Assigned(AContext.Data) then
    begin
      if AContext.Data is TClientIdentifier then
      begin
        TClientIdentifier(AContext.Data).Mac:=Data.Mac;
      end;
    end;
Data.Mac ist der empfangene Datensatz, welcher die Macadresse enthält.
An dieser Stelle verliert der Client immer die Verbindung und versucht, sich erneut zu verbinden.
Kann im OnExecute Event nicht auf AContext.Data zugegriffen werden oder weshalb verliert der Client die Verbindung?!

Viele Grüße!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Indy AContext.Data Zugriff disconnect

  Alt 10. Apr 2013, 19:38
Bei TClientIdentifier handelt es sich um eine Klasse von TObject die als einzige Definition mac:string; besitzt.
Bei Indy 10 wird die eigene Kontextklasse von TIdServerContext abgeleitet und dann dem Server über die Property ContextClass zugewiesen. Der Server erzeugt dann automatisch beim Connect eine Instanz dieser selbst definierten Kontextklassse.

Delphi-Quellcode:
TClientIdentifier = class(TIdServerContext)
public
  Mac: string;
end;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  IdServer.ContextClass := TClientIdentifier;
end;
Damit braucht man auf AContext.Data nicht mehr zuzugreifen, sondern hat direkt ein passendes Objekt:

Delphi-Quellcode:

  TClientIdentifier(AContext).Mac := Data.Mac;


Ob das den Fehler erklärt kann ich nicht sagen, aber man kann sicher mit dem Debugger in die OnExecute Methode hinein und sehen was nach der Zuweisung geschieht.

Hope this helps,
Michael Justin

Geändert von mjustin (10. Apr 2013 um 19:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Indy AContext.Data Zugriff disconnect

  Alt 10. Apr 2013, 20:18
Vielen Dank
Jetzt müsste ich noch wissen, in welcher Unit TIdServerContext deklariert ist. Ansonsten hab ich die Änderungen alle übernommen.

Edit:
Ich habe jetzt verschiedene Kombinationen probiert und TClientIdentifier als class(TIdContext) erstellt.
In OnExecute läuft alles bis zu
   TClientIdentifier(AContext).Mac:=Data.Mac; durch, wenn ich mit F8 Schritt für Schritt durchschalte, fliegt er genau an dieser Stelle raus und springt ins OnDisconnect.

Im OnCreate des Formulars habe ich TClientIdentifier als ContextClass gesetzt:

TCPServer.ContextClass:=TClientIdentifier; Ich hab mal im Anhang einen Screenshot der AContext Variable im OnExecute hochgeladen.

Edit 2:
Klappt nun alles, es lag anscheinend an einer weiteren Variable von TClientIdentifier, welche aufgrund der neuen Klasse nicht mehr zugänglich war und dann einen Fehler verursacht hat.
Danke für die Hilfe!

Viele Grüße
Miniaturansicht angehängter Grafiken
acontext.png  

Geändert von Delphi-Narr (11. Apr 2013 um 11:45 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 15:25 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