Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: neues Ereignis in TServerSocket

  Alt 30. Nov 2006, 22:46
Hi,

ich hab das jetzt mal getestet.
Delphi-Quellcode:
TGPRSServerSocket = class(TServerSocket)
  private
    FOnLogText: TLogTextEvent;
    FOnClientIdentify: TClientIdentifyEvent;
  protected
    procedure LogText(Socket : TBaseGPRSServerClientWinSocket; Msg : String);
    procedure ClientIdentify(Sender : TObject; Socket : TGPRSReceiveServerClientWinSocket);
    procedure GetSocket(Sender: TObject; Socket: Integer; var ClientSocket: TServerClientWinSocket);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnClientIdentify : TClientIdentifyEvent read FOnClientIdentify write FOnClientIdentify;
    property OnLogText : TLogTextEvent read FOnLogText write FOnLogText;
  end;

....

constructor TGPRSServerSocket.Create(AOwner: TComponent);
begin
  inherited create(AOwner);
  // Ereignisse zuweisen
  self.OnGetSocket := self.GetSocket;
end;

procedure TGPRSServerSocket.GetSocket(Sender: TObject; Socket: Integer;
  var ClientSocket: TServerClientWinSocket);
begin
  ClientSocket := TGPRSReceiveServerClientWinSocket.Create(Socket, self.socket);
  (ClientSocket as TGPRSReceiveServerClientWinSocket).OnLogText := self.LogText;
  (ClientSocket as TGPRSReceiveServerClientWinSocket).OnClientIdentify := self.ClientIdentify;
end;
Wie gesagt, es funzt erst mal. Eine saubere Methode ist das aber nicht. Das Ereignis OnGetSocket ist im published-Teil immer noch enthalten und kann somit bei Aufruf überschrieben werden. Damit werden dann alle speziellen Ereignisse unwirksam.

Wie gesagt, es muß noch einen anderen Weg geben.

Ich glaube folgender Weg müßte gehen:

TGPRSReceiveServerClientWinSocket wie gehabt nur von TCustomWinSocket ableiten.

Den für TServerClientWinSocket definierten Construktor übernehmen und als Member eine eigene TServerWinSocket mit den neuen Ereignissen implementieren.

Dann eine eigene TServerSocket (bei mir TGPRSServerSocket) jetzt von TCustomSocket ableiten.

Hm, ich glaub, so müßte es klappen.

Vielleicht kann mal jemand sagen ob ich auf dem richtigen Weg bin.

Gruß oki
  Mit Zitat antworten Zitat