en cas de non réponse du serveur
Zim513201
Membre
Salut à tous, me revoilà pour une petite question. Je suis toujours sur mon appel réseau sur mon serveur Arduino . Tout fonctionne pas trop mal, j'ai ma réponse Json, mon image s'affiche en fonction de cette réponse mais voila j'aimerai pouvois afficher une autre image (test_etat) si le serveur n'a pas répondu ( si la carte arduina n'est pas alimentée par exemple); Voila ma fonction qui affiche l'état :
func etatCloture1() {
guard let ipClo2 = textFieldAdresseIp1.text,
let clotureUrl2 = URL (string: "http://\(ipClo2)" )
else { return}
var request = URLRequest(url : clotureUrl2)
request.httpMethod = "POST"
let body = ""
request.httpBody = body.data(using: .utf8)
let session = URLSession(configuration: .default)
let task = session.dataTask(with: request){ ( data, response, error ) in
if let data = data, error == nil {
if let response = response as? HTTPURLResponse, response.statusCode == 200 {
if let responseJSON = try? JSONDecoder().decode([String: String].self, from: data),
let text = responseJSON ["etatcloture"],
let verrou = responseJSON ["etatVerrou"] {
print (text)
print (verrou)
DispatchQueue.main.async { // on reste dans la main Queue
// self.etatClotur1.text = text
if text == "Allumee" {
self.etatImage.image = UIImage(named: "etat_allumée")
}
if text == "Eteinte" {
self.etatImage.image = UIImage(named: "etat_eteint")
}
if verrou == "bloque" {
self.cadenas.image = UIImage(named: "cadenas")
}
if verrou == "debloque" {
self.cadenas.image = nil;
}
}
}
}
}
}
task.resume()
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si j'ai bien compris:
Je vois que tu n'en fais pas trop, mais ne jamais oublié que si tu as un
if
, tu as unelse
qui en découd, même si tu le vois pas...Parce que tu as un Timeout de 2m. Réduis-le?
Tu veux peut-être afficher cet image avant le call, dans un mode "je ne sais pas encore le résultat), et quand tu as ta réponse, tu changes l'image.
Quand tu fais ça:
URLRequest(url : clotureUrl2)
Tu appelles en réalité:
URLRequest(url: clotureUrl2, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60.0)
C'est dans la doc:
init(url:cachePolicy:timeoutInterval:)
À partir de combien de temps, considères-tu qu'une page web n'est pas joignable (souvent que le "site est down")? En fonction de ta connexion (Edge, 3G, 4G, Fibre, ADSL, 56k, WiFi rapide, etc.) ta page arrivera plus ou moins vite.
Si tu considères qu'en étant sur ton réseau local pour ton Arduino, la réponse doit être obtenue en 10 secondes, alors mets 10 secondes.
Sinon, comme dit, niveau UI, mettre un image dun "je ne sais pas encore" (un placeholder) en attendant d'avoir la réponse est toujours une solution.
nickel merci ça marche