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 :cry:

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 :P


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 :wink:

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 :oops:

ou peur être, c'est directement lié à mon PC, dans ce cas :cry:

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)
:wink:

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))