Server webgadget 10 secondes

Partagez votre expérience de PureBasic avec les autres utilisateurs.
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Server webgadget 10 secondes

Message par doudouvs »

Hello,

Voilà le code pour un serveur qui attend une connexion l'ors de la réception d'un message il ouvre un WebGadget qui reste 10 secondes.
Me suis bien pris la tête avec car si on a pas le Timer rien ne s'affichera dans le WebGadget, c'est con hein.
Je précise que ne suis pas un pro, donc il y aura surement moyen de faire mieux

L'idée c'est un d'un logiciel de caisse tactile PurHTTP héberger à l’extérieur, dont on récupère la requête sur un serveur localhost, qui envoi le ticket de caisse sur l'écran client.

Bon amusement la je vais faire joujou avec les imprimantes.

Bonnes fêtes de fin d'année à toutes et à tous

Pour tester avec un navigateur Attention Chrome ne marche pas chez moi il envoi de la M.... donc si le Ticket reste blanco c'est pas bon :

Code : Tout sélectionner

http://127.0.0.1:8000/ticket/Salut-le-Ticket
Perso j'utilise Wget :

Code : Tout sélectionner

wget http://127.0.0.1:8000/ticket/Salut-le-Ticket

Code : Tout sélectionner

Enumeration
  #WebGadget
  #Window_Ticket
  #fenp
  #server
EndEnumeration

Global EOL$
Global page$
Global HTML.S

; pour les fins de ligne
EOL$ = Chr(13)+Chr(10)

If InitNetwork() = 0
  End
EndIf
Port = 8000
*Buffer = AllocateMemory(4096)

If CreateNetworkServer(#server, Port,#PB_Network_TCP)
  Repeat
    SEvent = NetworkServerEvent()
    
    If SEvent
      ClientID = EventClient()
      Select SEvent
          
        Case #PB_NetworkEvent_None        ; Il ne s'est rien passé.    
          Debug "NetworkEvent_None"  
          ;Case #PB_NetworkEvent_Connect  ; Un nouveau client s'est connecté au serveur    
          Debug "NetworkEvent_Connect"  
          ;         Case #PB_NetworkEvent_Data        ; Des données ont été reçues     
          ;           Debug "NetworkEvent_Data"  
          
        Case #PB_NetworkEvent_Data
                  
          ; on récupère la requête du serveur
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 4096)
          String$ = PeekS(*Buffer, RequestLength, #PB_UTF8)
        
          ; on passe par FindString car la regex ne marche pas même si on enlève Chr(13) Chr(10)    
          Pos = FindString(String$, "HTTP/1.1",1) 
          ns$ = Left(String$, Pos-1)
          
          exp =CreateRegularExpression(#PB_Any,"^GET /.*?|/.*$")
          PrinterOrEcran$ = ReplaceRegularExpression(exp,ns$,"")
          FreeRegularExpression(exp)
          
          ; Pas besoin le client envoi déjà Encoder du moins le mien 
          ;pageresult$ = URLDecoder(pageresult$)
          
         
          If PrinterOrEcran$ = "ecran"
            
          EndIf
          ;#######################################################     
          
          If PrinterOrEcran$ = "ticket" 
           
            ;on envoi au client un réponse propre
            ContentType$ = "text/html"
            page$ = "<html>" + EOL$
            page$=page$ + "  <body>" + EOL$
            page$=page$ + "    <p>Hello world!</p>" + EOL$
            page$=page$ + "  </body>" + EOL$
            page$=page$ + "<html>" + EOL$
            head$="HTTP/1.1 200 OK" + EOL$
            head$=head$+"Date: Wed, 07 Aug 1996 11:15:43 GMT" + EOL$
            head$=head$+"Server: Ticket Web Server 0.1" + EOL$
            head$=head$+"Content-Length: "+Str(Len(page$)) + EOL$
            head$=head$+"Content-Type: "+ContentType$+EOL$
            head$=head$+EOL$
            page$=head$+page$
            SendNetworkString(ClientID,page$) 
   
            HTML.s = "<html><body>" +
                     "<center>COUCOU c'est moi<br>je suis là pour 10 secondes !!!!!!<br><br>LE TICKET</center>" +
                     "</body></html>"
            ;HTML.s = pageresult$ ; activé c'est le string que l'on envoi, désactivé  c'est le texte dans le HTML
            If OpenWindow(#Window_Ticket, 2000, 0, 300, 600, "Ticket client", #PB_Window_SystemMenu | #PB_Window_NoActivate | #PB_Window_BorderLess | #PB_Window_Tool)
              WebGadget(#WebGadget, 0, 0, 300, 600, "")
              SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, HTML)
              StickyWindow(#Window_Ticket, 1)
              
              AddWindowTimer(#Window_Ticket, 123, 250)
              
              ; Temps de présence du ticket 
              Value =0
              Repeat
                Event = WaitWindowEvent()
                If Event = #PB_Event_Timer And EventTimer() = 123
                  Value = Value + 1
                  Delay(1000) ; 10 secondes plus ou moins c'est un Timer
                  
                  If Value =10
                    Goto vasy
                  EndIf
                  
                EndIf    
                
              Until Event = #PB_Event_CloseWindow
            EndIf
            vasy: ; Sorti de la fenetre
            fenetre_ticket=1
            
          EndIf
          
          ;##############################################################        
          ;         Case #PB_NetworkEvent_Disconnect ; Un client nous à quitté
          ;           Debug "NetworkEvent_Disconnect" 
          
        Default
          
          If fenetre_ticket=1
            CloseWindow(#Window_Ticket)
          EndIf 
          fenetre_ticket=0
          
      EndSelect
      
    Else
      Delay(20)  ; Don't stole the whole CPU !
    EndIf
    
  Until Quit = 1 
  CloseNetworkServer(0)
Else
  MessageRequester("Error :", " Creation du serveur (port utilisé ?).", 0)
EndIf
End 
 
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS