HIX - Proyecto Ticket (I)
Proyecto Ticket
Vamos a crear una pequeña aplicación para los muchachos del pueblo. Solo tendrán de poner su nombre y el sistema lo registrará y les dará una clave para acceder a ver la película, fácil.
Crearemos un fichero llamado ticket.html
<!DOCTYPE
html>
<html>
<body>
<h2>Movie Ticket</h2>
<form action="proc_ticket.prg" method='post' >
<label for="fname">Name:</label><br>
<input type="text" name="user_name" value="John"><br><br>
<input type="submit" value="Give me a ticket">
</form>
<p>If you click the "Submit" button, the form-data will be sent to a page called "proc_ticket.prg".</p>
</body>
</html>
<html>
<body>
<h2>Movie Ticket</h2>
<form action="proc_ticket.prg" method='post' >
<label for="fname">Name:</label><br>
<input type="text" name="user_name" value="John"><br><br>
<input type="submit" value="Give me a ticket">
</form>
<p>If you click the "Submit" button, the form-data will be sent to a page called "proc_ticket.prg".</p>
</body>
</html>
Crearemos el proceso de petición de tickets que
llamaremos proc_ticket.prg
#define
FILE_TICKET hb_dirbase() + 'ticket.dbf'
#define MAX_TIMEOUT 5
function main()
local lExist := file( FILE_TICKET )
local hData := UPost()
local
cAlias, aDbf, cMessage
if ! file( FILE_TICKET )
aDbf := {}
AAdd(aDbf, { 'name', 'C', 40, 0 })
AAdd(aDbf, { 'data', 'D', 8, 0 })
AAdd(aDbf, { 'key' , 'C', 5, 0 })
dbCreate( FILE_TICKET, aDbf )
endif
USE ( FILE_TICKET ) SHARED NEW
cAlias := alias()
(cAlias)->( Dbappend() )
if (cAlias)->( TRlock() )
(cAlias)->name := hData[ 'user_name' ]
(cAlias)->data := date()
(cAlias)->key := key()
(cAlias)->( DbUnlock() )
endif
(cAlias)->( DbCommit() )
cMessage := '<html>'
cMessage += '<h1>Request processed !</h1><hr>'
cMessage += '<h3>Hi ' + hData[ 'user_name' ] + '. Your access code is ' + (cAlias)->key + '</h3>'
cMessage += '<hr><small>' + 'This ticket was processed at ' + dtoc( date() ) + ' ' + time() + '</small>'
cMessage += '</html>'
(cAlias)->( DbCloseArea() )
RETU cMessage
//---------------------------------------------------//
function TRLock()
LOCAL lRlock := .F.
LOCAL nIni := Seconds()
LOCAL cAlias := Alias()
LOCAL nElapsed
WHILE !lRlock
lRlock := (cAlias)->(DbRlock())
if !lRlock
nElapsed := Seconds() - nIni
if nElapsed >= MAX_TIMEOUT
EXIT // Timeout
endif
hb_IdleSleep(0.001)
endif
END
RETU lRlock
//---------------------------------------------------//
FUNCTION Key()
LOCAL cKey := ''
LOCAL cWords := 'abcdefghijklmnopqrstuvwxyz'
LOCAL nI, nPos
FOR nI := 1 TO 5
nPos := hb_RandomInt(1, Len(cWords))
cKey += SubStr(cWords, nPos, 1)
NEXT
RETURN cKey
#define MAX_TIMEOUT 5
function main()
local lExist := file( FILE_TICKET )
local hData := UPost()
if ! file( FILE_TICKET )
aDbf := {}
AAdd(aDbf, { 'name', 'C', 40, 0 })
AAdd(aDbf, { 'data', 'D', 8, 0 })
AAdd(aDbf, { 'key' , 'C', 5, 0 })
dbCreate( FILE_TICKET, aDbf )
endif
USE ( FILE_TICKET ) SHARED NEW
cAlias := alias()
(cAlias)->( Dbappend() )
if (cAlias)->( TRlock() )
(cAlias)->name := hData[ 'user_name' ]
(cAlias)->data := date()
(cAlias)->key := key()
(cAlias)->( DbUnlock() )
endif
(cAlias)->( DbCommit() )
cMessage := '<html>'
cMessage += '<h1>Request processed !</h1><hr>'
cMessage += '<h3>Hi ' + hData[ 'user_name' ] + '. Your access code is ' + (cAlias)->key + '</h3>'
cMessage += '<hr><small>' + 'This ticket was processed at ' + dtoc( date() ) + ' ' + time() + '</small>'
cMessage += '</html>'
(cAlias)->( DbCloseArea() )
RETU cMessage
//---------------------------------------------------//
function TRLock()
LOCAL lRlock := .F.
LOCAL nIni := Seconds()
LOCAL cAlias := Alias()
LOCAL nElapsed
WHILE !lRlock
lRlock := (cAlias)->(DbRlock())
if !lRlock
nElapsed := Seconds() - nIni
if nElapsed >= MAX_TIMEOUT
EXIT // Timeout
endif
hb_IdleSleep(0.001)
endif
END
RETU lRlock
//---------------------------------------------------//
FUNCTION Key()
LOCAL cKey := ''
LOCAL cWords := 'abcdefghijklmnopqrstuvwxyz'
LOCAL nI, nPos
FOR nI := 1 TO 5
nPos := hb_RandomInt(1, Len(cWords))
cKey += SubStr(cWords, nPos, 1)
NEXT
RETURN cKey
Es un código super básico que lo hace todo de manera sencilla, hasta crear la tabla !
Evidentemente se puede mejorar un montón:
índices, maximo peticiones, cantidad de entradas, máximo aforo,… pero esto os
lo dejo para todos vosotros 😊
Arrancamos hix -> start y ejecutamos localhost/ticket.html y voilà, ya tenemos nuestra primera aplicación lista.
Todos los datos estarán en nuestra tabla.
Fácil ? 😀
Comentarios
Publicar un comentario