[Tuto] Un Tchat sans serveurs, sans BDD, sans soucis

Informations pour bien débuter en PureBasic
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [Tuto] Un Tchat sans serveurs, sans BDD, sans soucis

Message par doudouvs »

en pb regarde la doc http://www.purebasic.com/documentation/ ... ction.html

exemple

Code : Tout sélectionner

InitNetwork()
ConnectionID = OpenNetworkConnection("localhost", 256)
SendNetworkString(ConnectionID, "hello socket")
CloseNetworkConnection(ConnectionID)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Yrahen
Messages : 51
Inscription : sam. 01/sept./2012 4:14

Re: [Tuto] Un Tchat sans serveurs, sans BDD, sans soucis

Message par Yrahen »

Effectivement, je vais me renseigner sur la lib network.
Pour repondre au reste, c'est effectivement possible de faire un systeme de tri/selection ect.. sur les fichiers. Je le fais pour mon MUD en de/serializant des arrays. Mais c'est reinventer la roue, et pour du coup si un systeme a besoin de ca, je prefere passer par une BDD.
Encore une fois, c'est une question sans doutes de preference et de contexte ;)
Pour ce qui est de wordpress, j'en ai parlé pour rebondir dans mon argumentation. Mais je suis entierement d'accord avec toi, c'est une usine a gaz loin d'etre opti et un dev perso serait sans doutes beaaaaucoup plus performant, n'importe qui ayant developpé son propre CMS pourra en temoigner ( dont toi j'imagine, vu que tu as l'air de savoir de quoi tu parles )

Pour enfin en revenir a mon code :
Je n'utilise pas de BDD->Choix que j'ai justifié parce que je n'ai pas jugé que c'etait utile dans le contexte.
Je n'utilise pas les sockets->C'est peut etre une erreur, et je vais me renseigner sur la bibliotheque parce que chui curieux

Mais dans tout les cas, le but premier de ce code etait surtout d'avoir une base de systeme simple, que l'on peut mettre sur n'importe quel hebergement ( mutualisé ou non ), et que l'on peut faire evoluer a sa guise ;)
"L'imagination est plus importante que la connaissance."
Avatar de l’utilisateur
omega
Messages : 623
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: [Tuto] Un Tchat sans serveurs, sans BDD, sans soucis

Message par omega »

J'ai testé mais je ne comprends pas le fonctionnement, je reçois des mots en chinois alors que mon message est en français, suite je ne sais pas par quoi commencer par le pseudo ou par le message?? Meri de m'éclairer
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [Tuto] Un Tchat sans serveurs, sans BDD, sans soucis

Message par blendman »

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+
Répondre