Hi spitzley,
der Ordnunghalber würd ich beim Reconnecten im Fehlerfall
aufräumen statt ständig nur weiter neu auf zu machen. Möglicherweise läuft der Client dann nicht mehr voll.
Und das gleiche würde ich bei der eigentlichen, abgebrochenen Verbindung auch mit ner
Exception abfangen. Sprich: die alte Verbindung vor dem Reconnect auch zuerst schliessen bevor der Timer angemacht wird.
Im Weiteren würd ich den Timer
langsam länger takten. Nachdem Du von mehr als einem Client sprichst feuerst Du sonst Deinen Server irgendwann nieder. Zwar ist sich jeder selbst der Wichtigste und will gleich wieder ran aber mit nem toten Pferd reitet es sich im Allgemeinen schlecht.
Delphi-Quellcode:
procedure TNetRouter.OnGateway1ReconnectServerTimer(Sender: TObject);
begin
if FGateway1Activate and not(FGateway1Connected) then
begin
if FGateway1AutoReconnect then
[b]try[/b]
inc(FGateway1NoOfConnectRetries);
Gateway1TCPClientSock.Open;
[u]FGateway1ReconnectServerTimer.Interval:= 3000;[/u]
[b]except
HandleReConnectError;[/b]
end;
FGateway1ReconnectServerTimer.Enabled:=false;
(Connect-Error schaltet Timer wieder ein)
end;
end;
[b]Procedure TNetRouter.HandleReConnectError;
begin
Gateway1TCPClientSock.Close;
[u]FGateway1ReconnectServerTimer.Interval:= FGateway1ReconnectServerTimer.Interval + 1000;[/u]
end;[/b]
Have fun, Bernd