fix(apk): attente de connexion courte et trois essais

Mesure sur ce telephone : api.github.com rend plusieurs adresses, 140.82.121.6
repond en 0,22 s et 140.82.121.5 n'est pas joignable. Un navigateur passe a la
suivante aussitot ; l'application attendait son delai entier sur la mauvaise.
Huit secondes pour la poignee de main, trente pour la reponse, trois essais.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-26 18:42:22 +01:00
parent 074e6f92e7
commit 64195fc641
+18 -9
View File
@@ -61,6 +61,8 @@ type
FBaseUrl: string; FBaseUrl: string;
FToken: string; FToken: string;
FTimeoutMs: Integer; FTimeoutMs: Integer;
/// Attente de la POIGNEE DE MAIN, distincte de celle de la reponse.
FConnectMs: Integer;
FPrivacyChecked: Boolean; FPrivacyChecked: Boolean;
public public
constructor Create(const ABaseUrl, AToken: string); constructor Create(const ABaseUrl, AToken: string);
@@ -136,7 +138,7 @@ begin
FPrivacyChecked := True; FPrivacyChecked := True;
LHttp := THTTPClient.Create; LHttp := THTTPClient.Create;
try try
LHttp.ConnectionTimeout := FTimeoutMs; LHttp.ConnectionTimeout := FConnectMs;
LHttp.ResponseTimeout := FTimeoutMs; LHttp.ResponseTimeout := FTimeoutMs;
LHttp.HandleRedirects := False; LHttp.HandleRedirects := False;
LHttp.UserAgent := 'PMServer'; LHttp.UserAgent := 'PMServer';
@@ -193,7 +195,7 @@ begin
LRepo := LParts[1]; LRepo := LParts[1];
LHttp := THTTPClient.Create; LHttp := THTTPClient.Create;
try try
LHttp.ConnectionTimeout := FTimeoutMs; LHttp.ConnectionTimeout := FConnectMs;
LHttp.ResponseTimeout := FTimeoutMs; LHttp.ResponseTimeout := FTimeoutMs;
LHttp.HandleRedirects := False; LHttp.HandleRedirects := False;
LHttp.UserAgent := 'PMServer'; LHttp.UserAgent := 'PMServer';
@@ -328,7 +330,7 @@ begin
try try
LHttp := THTTPClient.Create; LHttp := THTTPClient.Create;
try try
LHttp.ConnectionTimeout := FTimeoutMs; LHttp.ConnectionTimeout := FConnectMs;
LHttp.ResponseTimeout := FTimeoutMs; LHttp.ResponseTimeout := FTimeoutMs;
LHttp.HandleRedirects := False; LHttp.HandleRedirects := False;
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
@@ -338,7 +340,7 @@ begin
// Deux essais, meme raison qu'a la lecture : un SYN perdu ne dit rien // Deux essais, meme raison qu'a la lecture : un SYN perdu ne dit rien
// du serveur. Le corps est renvoye depuis le debut a chaque essai. // du serveur. Le corps est renvoye depuis le debut a chaque essai.
LResp := nil; LResp := nil;
for var LTry := 1 to 2 do for var LTry := 1 to 3 do
begin begin
try try
LReq.Position := 0; LReq.Position := 0;
@@ -350,7 +352,7 @@ begin
begin begin
Result.Status := ssNetworkError; Result.Status := ssNetworkError;
Result.Error := E.ClassName + ': ' + E.Message; Result.Error := E.ClassName + ': ' + E.Message;
if LTry = 2 then Exit; if LTry = 3 then Exit;
end; end;
end; end;
end; end;
@@ -413,7 +415,14 @@ begin
// paquets (ping 71 a 236 ms), et c'est le SYN qui se perd. D'ou DEUX essais // paquets (ping 71 a 236 ms), et c'est le SYN qui se perd. D'ou DEUX essais
// courts plutot qu'une seule longue attente, et un total qui reste sous le // courts plutot qu'une seule longue attente, et un total qui reste sous le
// garde-fou de 50 s de l'ecran. // garde-fou de 50 s de l'ecran.
FTimeoutMs := 20000; FTimeoutMs := 30000;
// COURT POUR SE CONNECTER, LONG POUR REPONDRE. Mesure sur ce telephone :
// api.github.com rend plusieurs adresses, 140.82.121.6 repond en 0,22 s et
// 140.82.121.5 n'est pas joignable du tout. Un navigateur passe a la
// suivante aussitot ; l'application attendait son delai entier sur la
// mauvaise. Huit secondes suffisent a une adresse qui repond, et trois
// essais laissent le temps de tomber sur une bonne.
FConnectMs := 8000;
end; end;
function TSyncClient.Fetch(const AKnownETag: string): TSyncResult; function TSyncClient.Fetch(const AKnownETag: string): TSyncResult;
@@ -439,7 +448,7 @@ begin
LHttp := THTTPClient.Create; LHttp := THTTPClient.Create;
try try
LHttp.ConnectionTimeout := FTimeoutMs; LHttp.ConnectionTimeout := FConnectMs;
LHttp.ResponseTimeout := FTimeoutMs; LHttp.ResponseTimeout := FTimeoutMs;
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
// PAS DE CONNEXION REUTILISEE. Le telephone change de reseau (Wi-Fi qui // PAS DE CONNEXION REUTILISEE. Le telephone change de reseau (Wi-Fi qui
@@ -467,7 +476,7 @@ begin
LStream := TStringStream.Create('', TEncoding.UTF8); LStream := TStringStream.Create('', TEncoding.UTF8);
try try
LResp := nil; LResp := nil;
for var LTry := 1 to 2 do for var LTry := 1 to 3 do
begin begin
try try
LResp := LHttp.Get(FBaseUrl, LStream); LResp := LHttp.Get(FBaseUrl, LStream);
@@ -477,7 +486,7 @@ begin
begin begin
Result.Status := ssNetworkError; Result.Status := ssNetworkError;
Result.Error := E.ClassName + ': ' + E.Message; Result.Error := E.ClassName + ': ' + E.Message;
if LTry = 2 then Exit; if LTry = 3 then Exit;
LStream.Clear; LStream.Clear;
end; end;
end; end;