Mam następująco zdefiniowaną klasę:
TComunicator = class (TComponent)
procedure ClientRead(Sender :TObject; Socket :TCustomWinSocket);
procedure ClientConnect(Sender :TObject; Socket :TCustomWinSocket);
procedure ThreadStop(Sender :TObject; Thread :TServerClientThread);
public
Client :TClientSocket;
Server :TServerSocket;
constructor Create(Owner :TComponent; HostIP :string; HostPort :Integer; LocalPort :Integer); overload;
destructor Destroy; overload;
end;
procedure TComunicator.ClientRead(Sender :TObject; Socket :TCustomWinSocket);
begin
...
end;
procedure TComunikator.ClientConnect(Sender :TObject; Socket :TCustomWinSocket);
begin
...
end;
procedure TComunicator.ThreadStop(Sender :TObject; Thread :TServerClientThread);
begin
raise Exception.Create('Utracono połączenie!');
end;
constructor TComunicator.Create(Owner :TComponent; HostIP :string; HostPort :Integer; LocalPort :integer);
var retry :integer;
begin
inherited Create(Owner);
Server := TServerSocket.Create(Owner);
Server.Port:=LocalPort;
Server.OnClientRead := ClientRead;
Server.OnClientConnect := ClientConnect;
Server.OnThreadEnd := ThreadStop;
Server.Active := true;
Client := TClientSocket.Create(Owner);
Client.Address:=HostIP;
Client.Port:=HostPort;
Client.Open;
end;
destructor TComunicator.Destroy;
begin
Client.Active:=false;
Client.Free;
Server.Active:=false;
Server.Free;
end;
Obiet tej klasy jest składnikiem klasy TThread. Teoretycznie wszystko powinno działać. Niestety zdarzenie OnClientConnect i OnClientRead nigdy nie jest wywoływane (pomimo łączenia się i wysyłania danych na wyznaczonym porcie). Z ciekawości dodałem zdarzenie on ThreadStop i ono jest wywoływane. Nie mam pojęcia, czemu tak się dzieje...