InitNetwork & EventTimer

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

InitNetwork & EventTimer

Message 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:
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: InitNetwork & EventTimer

Message 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:
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: InitNetwork & EventTimer

Message 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() ?
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: InitNetwork & EventTimer

Message 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:
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: InitNetwork & EventTimer

Message 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:
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: InitNetwork & EventTimer

Message 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))
Répondre