
jjacques68
Membres confirmés-
Compteur de contenus
4 349 -
Inscription
-
Dernière visite
-
Jours gagnés
39
Tout ce qui a été posté par jjacques68
-
elle bug leur instruction read.
-
j'ai viré les sleep et remplacé par des setTimeout pour la reconnexion... y en a 3 maintenant (dans les 2 write et dans la boucle de read) c'est un bordel inimaginable (plein de deconnexion/reconnexion et des paquets qui manquent...) function QuickApp:onInit() self.sock = net.TCPSocket({timeout = 2000}) self.ip = self:getVariable("IP") self.port = tonumber(self:getVariable("Port")) self:Open_Socket() end ---------------------------------------------------------------- function QuickApp:Open_Socket() self.sock:connect(self.ip, self.port,{ success = function() self:debug("Socket opened") self.socketClosed = false self:updateProperty("value", true) self:waitForResponseFunction() end, error = function(err) self:debug("error opening socket : ",err) self.sock:close() self.socketClosed = true self:updateProperty("value", false) end }) end ---------------------------------------------------------------- function QuickApp:Close_Socket() self.sock:close() self.socketClosed = true self:debug("Socket closed") self:updateProperty("value", false) end ---------------------------------------------------------------- function QuickApp:waitForResponseFunction() self.sock:read({ -- reading a data package from the socket success = function(data) self:debug("From Server - "..data) -- handling of received data self:waitForResponseFunction() -- looping of data readout end, error = function(err) -- a function that will be called in case of an error when trying to receive data, e.g. disconnecting a socket self:debug("response error - "..err) self.sock:close() -- socket closed fibaro.setTimeout(5000, function() self:Open_Socket() end) -- re-connection attempt (every 5s) end }) end --------------------------------------------------------------- function QuickApp:Send(MaTrame) --reconnect if closed if self.socketClosed == true then fibaro.setTimeout(3000, function() self:Open_Socket() end) end --affiche la trame dans le label self:updateView("LBL_Buffer", "text", tostring(MaTrame)) --envoi la première trame d'essai self.sock:write("\n", { success = function() --self:debug("First send = OK") --envoi la data self.sock:write(MaTrame.."\n", { success = function() --self:debug("Data send = OK") end, error = function(err) self:debug("error sending data : "..err) self:Close_Socket() fibaro.setTimeout(3000, function() self:Send(MaTrame) end) end }) end, error = function(err) self:debug("error sending first : "..err) self:Close_Socket() fibaro.setTimeout(3000, function() self:Send(MaTrame) end) end }) end Je comprends même plus l'ordre des messages qui s'affichent dans le debug
-
alors je viens de faire une petite expérience : j'ai ajouté la fonction function QuickApp:waitForResponseFunction() self.sock:read({ -- reading a data package from the socket success = function(data) self:debug("From Server - "..data) -- handling of received data self:waitForResponseFunction() -- looping of data readout end, error = function(err) -- a function that will be called in case of an error when trying to receive data, e.g. disconnecting a socket self:debug("response error - "..err) self.sock:close() -- socket closed fibaro.setTimeout(5000, function() self:Open_Socket() end) -- re-connection attempt (every 5s) end }) end et bien j'ai comme réponse : quand y en a une : [DEBUG] 18.03.2020 21:47:37: response error - Operation canceled et ça tourne en boucle, donc j'ai visiblement des erreurs venant du serveur... mais y a aucune raisons !!!
-
ah mais dans leur exemple ils font une lecture continue ! faudrait pouvoir arriver à intercepter le résultat de cette fonction après le write, genre dans une variable locale... nan c’est pas le top... ton idée serait de faire ce read dans le success du write... et que si on détecte un message du serveur genre un close, on ré ouvre Mais bon sang, il devrait le faire tout seul ça ! désolé je réfléchi à voix haute
-
ben j’étais entrain de cogiter dessus, ajouter un self.sock:read() dans le write... ça fait beaucoup d’instruction asynchrone qui s’imbriquent... je suis entrain de lire pour la 100ème fois l’exemple sur le site de fibaro, je comprends bien la méthode read, mais j’ai du mal à comprendre comment l’intégrer !
-
ben je suis d’accord, c’est la solution du pauvre... mais c’est pas possible de pas pouvoir stabiliser ce truc, sur la HC2 c’était impec !
-
tiens en disant ça ! c’est nul, mais j’ai constaté que quand le QA crash, il redémarre au bout de 3 - 4 secondes... pourquoi pas provoquer un crash du QA en cas de perte de connexion ! roah j’ai honte de dire ça
-
si on pouvait réinitialiser le QA en cas de perte de connexion...
-
tu ne constates pas la même chose de ton côté ?
-
J'ai rien programmé comme réponses sur le serveur... du coup j'ai pas besoin de traité les read().
-
j'ai viré les sleep... ça change rien... [DEBUG] 18.03.2020 20:14:19: First send = OK [DEBUG] 18.03.2020 20:14:19: error sending data : Broken pipe [DEBUG] 18.03.2020 20:14:19: Socket closed [DEBUG] 18.03.2020 20:14:20: error sending first : Bad file descriptor [DEBUG] 18.03.2020 20:14:20: Socket closed [DEBUG] 18.03.2020 20:14:20: error opening socket : Operation canceled [DEBUG] 18.03.2020 20:14:20: error sending first : Bad file descriptor ...
-
J'ai l'impression que l'instruction close() ne libère pas les ressources correctement...
-
c'est celui sur lequel on avait déjà bossé : function QuickApp:onInit() self.sock = net.TCPSocket({timeout = 2000}) self.ip = self:getVariable("IP") self.port = tonumber(self:getVariable("Port")) self:Open_Socket() end ---------------------------------------------------------------- function QuickApp:Open_Socket() self.sock:connect(self.ip, self.port,{ success = function() self:debug("Socket opened") self.socketClosed = false self:updateProperty("value", true) self:Send("Hello") end, error = function(err) self:debug("error opening socket : ",err) self.sock:close() self.socketClosed = true self:updateProperty("value", false) end }) end ---------------------------------------------------------------- function QuickApp:Close_Socket() self.sock:close() self.socketClosed = true self:debug("Socket closed") self:updateProperty("value", false) end --------------------------------------------------------------- function QuickApp:Send(MaTrame) --reconnect if closed if self.socketClosed == true then self:Open_Socket() fibaro.sleep(3000) end --affiche la trame dans le label self:updateView("LBL_Buffer", "text", tostring(MaTrame)) --envoi la première trame d'essai self.sock:write("\n", { success = function() self:debug("First send = OK") --envoi la data self.sock:write(MaTrame.."\n", { success = function() self:debug("Data send = OK") end, error = function(err) self:debug("error sending data : "..err) self:Close_Socket() fibaro.sleep(500) self:Send(MaTrame) end }) end, error = function(err) self:debug("error sending first : "..err) self:Close_Socket() fibaro.sleep(500) self:Send(MaTrame) end }) end
-
euh je crois que ça vient d'un copier coller... inutile
-
si tu as le temps je veux bien, ça fait 5 heures que je fais toutes sortes d'essais... Ce qui est dingue, c'est que j'utilise le bout de code suivant (dan sun autre QA) pour un envoi unique et à la demande, et j'ai aucun soucis !! le truc, c'est dans ce cas là j'ouvre la socket à chaque envoi, chose que je peux pas faire dans l'autre QA, car il y aune grosse quantité de données envoyées à la suite... puis c'est pas normal... function QuickApp:TurnOffPc(Ip) self.sockOff:connect(tostring(Ip), tonumber(self:getVariable("Port")),{ success = function() self:debug("Socket OFF - opened") fibaro.sleep(100) self.sockOff:write("shutdown;YWRtaW5zaHV0ZG93bg==", { success = function() self:debug("Socket OFF - Data sended") end, error = function(err) self:debug("Socket OFF - error sending data : "..err) self:Close_SocketOff() fibaro.setTimeout(3000, function() self:TurnOffPc(Ip) end) end }) end, error = function(err) self:debug("Socket OFF - error opening : ",err) self:Close_SocketOff() fibaro.setTimeout(3000, function() self:TurnOffPc(Ip) end) end }) end
-
pffffffffffff... je trouve pas ce qui cloche ! Ce qui est sûr : - La connexion du QA est immédiate si le serveur est déjà lancé. - Si le serveur est redémarré, le QA n'arrive pas à se reconnecter malgré le code qu'on mis en place. Pour le refaire partir, je suis obligé de modifier n'importe quoi dans le QA afin de de pouvoir l'enregistrer et donc de le redémarrer. En gros : le serveur en premier, le QA en deuxième. L'inverse est impossible. Faut redémarrer le QA.
-
J'ai l'impression que les boucles dans le Open_Socket() et dans le Send() se prennent les pied dans le tapis...
-
ouai nan j'arrive pas réouvrir la socket ... j'ai cette erreur lors de la tentative de réouverture : pourtant, côté serveur je vois bien la demande arriver... et le serveur l'accepte bien
-
en même temps, vu l’actualité, les gens ont peut être autre chose à faire
-
pourtant j’ai pas l’impression que beaucoup de personnes possèdent une HC3... c’est plutôt calme les sujets...
-
mouai j’ai encore des difficultés de connexion au serveur ... je vais regardé ça demain. bon une fois que c’est ouvert c’est très stable.
-
nan mais j’espère qu’ils vont quand même sortir une MAJ prochainement !
-
du coup, j'allume avec la HC2 et j'éteins avec la HC3
-
mais attend, le broadcast (en général) peut pas se faire sur une socket TCP ? c'est que pour l'UDP ?
-
oui exacte, mais je le suis dis que je le passais sur une socket TCP... Ben visiblement non... Le broadcast passe pas