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