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