From c2bbc518842ec1afe9f13a16d89c514ee4da80b1 Mon Sep 17 00:00:00 2001 From: David Florness Date: Sat, 7 Mar 2020 15:27:19 -0700 Subject: [PATCH] The client now supports voting in multiple elections --- client.rkt | 62 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/client.rkt b/client.rkt index bd56619..3798108 100644 --- a/client.rkt +++ b/client.rkt @@ -53,35 +53,17 @@ (let loop ([wait 0]) (sleep wait) (with-handlers ([exn:fail:network:http:error? - (λ (exn) + (λ (ex) (break-enabled #t) (display ".") (flush-output) (loop 3))]) f))) -(module+ main - (define point (gen)) - - (define bulletin - (update-port (update-host json-requester "localhost") 1984)) - - (define token - (let ([username (readline "Username: ")] - [password (get-pass "Password: ")]) - (with-handlers ([exn:fail:network:http:error? - (λ ([ex : exn:fail:network:http:error]) - (newline) - (displayln (format "Login refused: ~a" - (exn-message ex))) - (exit))]) - (json-response-body - (post bulletin "/register" - #:data - (jsexpr->string (hasheq 'input (integer->hex-string point) - 'username username - 'password password))))))) - +(define (vote-in-election + [point : Integer] + [bulletin : requester] + [token : JSExpr]) (displayln "retrieving candidates...") (define candidates (cast (json-response-body (retry-request (get bulletin "/candidates"))) @@ -308,3 +290,37 @@ [rank rankings]) (for ([r rank]) (displayln (format "~a) ~a" i (list-ref candidates r)))))) + +(module+ main + (define point (gen)) + + (define bulletin + (update-port (update-host json-requester "localhost") 1984)) + + (define token + (let ([username (readline "Username: ")] + [password (get-pass "Password: ")]) + (with-handlers ([exn:fail:network:http:error? + (λ ([ex : exn:fail:network:http:error]) + (newline) + (displayln (format "Login refused: ~a" + (exn-message ex))) + (exit))]) + (json-response-body + (post bulletin "/register" + #:data + (jsexpr->string (hasheq 'input (integer->hex-string point) + 'username username + 'password password))))))) + + ; the bulletin can have multiple elections + (let loop () + (with-handlers ([exn:fail? + (λ ([ex : exn:fail]) + (displayln (exn-message ex)) + (displayln + "Assuming election was cancelled; starting over") + (break-enabled #t) + (loop))]) + (vote-in-election point bulletin token)) + (loop))) -- 2.38.4