Salut
J'ai corrigé le fichier pb qui ne fonctionnait plus (envoi de charactères chinois ou autre).
En plus, je pense que ça doit être multiplateforme comme ça maintenant.
Je suis passé par la lib HTTP, et notamment les HTTPRequest() (en post et get), qui fonctionnent super
Code : Tout sélectionner
; tchat en php et purebasic par Yrahen 2014
; modifié par blendman en novembre 2021, pour être compatible avec pb 5.73
Enumeration
#Fenetre
#Police
#Editeur
#Message
#Pseudo
EndEnumeration
If InitNetwork() =0
MessageRequester("Erreur","Impossible d'initialiser le réseau")
End
EndIf
DelayRefresh=2 ; frequence d'actualisation du tchat en secondes
; Modifier votre URL de votre site ici :
Global URL$ = "http://VOTRE_URL/tchat.php"
; Pour quitter proprement en fermant le thread
Global QuitRefresh = 0
; Le tableau pour libérer ensuite mes thread (quand on ferme le programme
Global Thread
; ajout d'une petite sécurité si besoin : ceci n'est pas utilisé mais vous pouvez l'utiliser lors de l'envoi des requetes
NewMap Header.s()
Header("User-Agent") = "Application/5.0.0.1"
;{ procedures
Procedure Refresh(Delay)
; procédure par yrahen, qui permet de rafraichir la liste des messages du tchat.
; j'ai modifié en passant par les requete HTTP (HTTPRequest(#PB_HTTP_Get...)
Repeat
; je dois bloquer le mutex, car sinon, certaines requete ne passent pas lors de l'envoi.
u$ =url$ +"?Action=Refresh"
HTTPRequest= HTTPRequest(#PB_HTTP_Get, u$,"")
If HTTPRequest >0
Try$ = HTTPInfo(HTTPRequest, #PB_HTTP_Response)
; Debug "Status: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
; Debug "Réponse: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
Affichage$ = ReplaceString(Try$,"<br/>",Chr(10))
affichage$ = ReplaceString(affichage$,"\'","'")
SetGadgetText(#Editeur,Affichage$)
FinishHTTP(HTTPRequest)
EndIf
Delay(delay*1000)
Until QuitRefresh = 1
EndProcedure
; Puis on lance le programme
If OpenWindow(#Fenetre, 0, 0, 600, 560,"Tchat", #PB_Window_SystemMenu)
Thread = CreateThread(@Refresh(), DelayRefresh)
LoadFont(#Police, "Tahoma", 14)
SetGadgetFont(#PB_Default, FontID(#Police))
EditorGadget(#Editeur, 10, 10, 580, 490,#PB_Editor_ReadOnly|#PB_Editor_WordWrap)
StringGadget(#Message, 190, 510, 400, 40, "")
StringGadget(#Pseudo, 10, 510, 170, 40, "")
AddKeyboardShortcut(#Fenetre, #PB_Shortcut_Return, 15)
Repeat
Event = WaitWindowEvent(1)
If Event = #PB_Event_CloseWindow
quit =1
QuitRefresh = 1
ElseIf Event=#PB_Event_Menu And EventMenu()=15
Message$ = GetGadgetText(#Message)
Pseudo$ = GetGadgetText(#Pseudo)
urlOk$ = URLEncoder(url$+"?Action=Post&Pseudo="+Pseudo$+"&Message="+Message$)
; on peut envoyer le message
HTTPRequest=HTTPRequest(#PB_HTTP_Post, urlOk$) ; , "", #PB_HTTP_Debug|#PB_HTTP_NoSSLCheck) ; , Header() )
If HttpRequest
SetGadgetText(#Message,"")
FinishHTTP(HTTPRequest)
EndIf
EndIf
Until quit=1
; on ferme la fenêtre
CloseWindow(#Fenetre)
; avant de fermer, on attend que le thread soit fermé, c'est plus propre.
Repeat
ok =0
If IsThread(thread) = 0
ok = 1
EndIf
Until ok = 1
End
EndIf
Le code PHP est le même que sur le 1er message.
Par contre, j'ai d'abord dû créer le fichier Tchat.txt sur le serveur pour que ça marche.
A+