Page 1 sur 1
InitNetwork & EventTimer
Publié : ven. 16/oct./2020 22:39
par Ekim
Bonsoir à tous, pour faire simple j'ai un problème quelques peu étrange, un problème que je n'avais d'ailleurs jamais rencontré dans les précédentes version de PB
Par exemple dans mon projet (encore en état de brouillon chaotique), je place un contrôleur d'évènement "Timer" pour les effets spéciaux
et un peu plus en bas, InitNetwork() pour la connexion réseau
puis apparemment, temps qu'il y a la présence d'une boucle "Case #PB_Event_Timer" dans ce cas InitNetwork() refuse de fonctionner((((
alors bug ou non, je ne sais pas, et sa m'empêche d'avancer

Re: InitNetwork & EventTimer
Publié : ven. 16/oct./2020 23:19
par Ekim
Je viens de trouver la principale cause du problème
voici le coupable "GetHTTPHeader()"
c'est lui qui empêchait le reste de fonctionner, le vilain
je m'en servais principalement pour effectuer un filtrage
Code : Tout sélectionner
EnTete$ = GetHTTPHeader(pfe$)
Repeat
Index+1
;
Ligne$ = StringField(EnTete$, Index, #LF$)
;
If FindString(Ligne$,"HTTP/1.1 200 OK", #PB_String_NoCase)
state.b = 1
EndIf
;
If FindString(Ligne$, "Content-Length:", #PB_String_NoCase)
size$ = LTrim(Mid(Ligne$, 16))
EndIf
Until Ligne$ = #Empty$
;
Index = 0
Maintenant, la question est, peut on faire autrement que ce bout de code?
Je vous remercie d'avance

Re: InitNetwork & EventTimer
Publié : mer. 21/oct./2020 21:27
par Naheulf
Ton problème c'est le temps qu'il passe dans GetHTTPHeader(), le temps qu'il passe dans la boucle repeat...Until ou juste la présence du GetHTTPHeader() ?
Re: InitNetwork & EventTimer
Publié : lun. 26/oct./2020 2:26
par Ekim
Le simple fait d'appeler cette fonction en présence d'un timer suffit à bloquer l'appli
la raison, j'avoue, je ne sais pas encore
ou peur être, c'est directement lié à mon PC, dans ce cas

Re: InitNetwork & EventTimer
Publié : lun. 26/oct./2020 9:17
par Marc56
Bonjour,
Quelques pistes:
- Comme tu l'as bien lu dans l'aide: ne plus utiliser GetHTTPHeader()
Attention
Cette fonction est dépréciée, elle sera peut-être supprimée dans une future version de PureBasic. Elle ne doit pas être utilisée dans du nouveau code.
Note: Veuillez utiliser HTTPRequest() à la place.
- InitNetwork(): on ne l'appelle qu'une seule fois (au début du programme)
- On peut aller plus vite en utilisant #PB_Http_StatusCode, #PB_Http_Response, pour savoir si la requête est OK et avoir le message d'erreur avec #PB_Http_ErrorMessage.
- Penser à fermer les requêtes FinishHTTP()
- Les opérations réseau nécessitent du temps de réponse, ne pas faire de timer trop court.
- Inutile de filtrer ligne par ligne: FindString() peut lire toute une chaine même avec sauts de ligne.
Code : Tout sélectionner
; Un seul appel à InitNetwork()
InitNetwork()
; EnTete$ = GetHTTPHeader(pfe$) ne plus utiliser cette méthode
ID_HTTP = HTTPRequest(#PB_HTTP_Get, "https://www.purebasic.com/")
EnTete$ = HTTPInfo(ID_HTTP, #PB_HTTP_Headers)
If FindString(EnTete$,"HTTP/1.1 200 OK", #PB_String_NoCase)
state.b = 1
Debug "Requête OK"
; Mieux: #PB_Http_StatusCode dès le début.
EndIf
If FindString(EnTete$, "Content-Length:", #PB_String_NoCase)
size$ = LTrim(Mid(Ligne$, 16))
Debug "Longueur; " + size$
EndIf
Debug "--- Entête complet ---"
Debug EnTete$
FinishHTTP(ID_HTTP)

Re: InitNetwork & EventTimer
Publié : mer. 28/oct./2020 2:48
par Ekim
Ok merci pour ta réponse)
d'autant plus qu'un timer doit consommer beaucoup de ressource
et merci pour la correction du code))