~edwargix/tallyard

099dcf9d518450b9ba913dcd7d8530aa54125309 — David Florness 5 years ago e637a23
Wrap bulletin program code in main module
1 files changed, 59 insertions(+), 58 deletions(-)

M secret-sharing/bulletin.rkt
M secret-sharing/bulletin.rkt => secret-sharing/bulletin.rkt +59 -58
@@ 5,69 5,70 @@
         web-server/servlet-env
         json)

(define voters (list))
(define _status 'registering)
(define _outputs (make-hasheqv))
(module+ main
  (define voters (list))
  (define _status 'registering)
  (define _outputs (make-hasheqv))

(define (candidates request)
  (define candidates '("Emacs" "Vim" "VSCode"))
  (if (eq? _status 'voting)
      (response/jsexpr candidates)
      (response/jsexpr
       empty
       #:code 403
       #:message #"Voting has not begun")))
  (define (candidates request)
    (define candidates '("Emacs" "Vim" "VSCode"))
    (if (eq? _status 'voting)
        (response/jsexpr candidates)
        (response/jsexpr
         empty
         #:code 403
         #:message #"Voting has not begun")))

(define (register request)
  (define params (bytes->jsexpr (request-post-data/raw request)))
  (displayln params)
  (set! voters (cons (hasheq 'name (hash-ref params 'name)
                             'input (hash-ref params 'input))
                     voters))
  (response/jsexpr empty))
  (define (register request)
    (define params (bytes->jsexpr (request-post-data/raw request)))
    (displayln params)
    (set! voters (cons (hasheq 'name (hash-ref params 'name)
                               'input (hash-ref params 'input))
                       voters))
    (response/jsexpr empty))

(define (done request)
  (set! _status 'voting)
  (response/jsexpr (symbol->string _status)))
  (define (done request)
    (set! _status 'voting)
    (response/jsexpr (symbol->string _status)))

(define (peers request)
  (if (eq? _status 'voting)
      (response/jsexpr (for/list ([v (in-list voters)])
                         (hash-ref v 'input)))
      (response/jsexpr
       empty
       #:code 403
       #:message #"Voting has not begun")))
  (define (peers request)
    (if (eq? _status 'voting)
        (response/jsexpr (for/list ([v (in-list voters)])
                           (hash-ref v 'input)))
        (response/jsexpr
         empty
         #:code 403
         #:message #"Voting has not begun")))

(define (outputs request)
  (if (eq? _status 'voting)
      (begin
        (let ([params (bytes->jsexpr (request-post-data/raw request))])
          (for ([p (in-hash-keys params)])
            (hash-update! _outputs p (λ (l) (cons (hash-ref params p) l)) empty)))
        (response/jsexpr empty))
      (response/jsexpr
       empty
       #:code 403
       #:message #"Voting has not begun")
      ))
  (define (outputs request)
    (if (eq? _status 'voting)
        (begin
          (let ([params (bytes->jsexpr (request-post-data/raw request))])
            (for ([p (in-hash-keys params)])
              (hash-update! _outputs p (λ (l) (cons (hash-ref params p) l)) empty)))
          (response/jsexpr empty))
        (response/jsexpr
         empty
         #:code 403
         #:message #"Voting has not begun")
        ))

(define-values (dispatcher url-generator)
  (dispatch-rules
   [("candidates") candidates]
   [("register") #:method "post" register]
   [("done") #:method "put" done]
   [("peers") peers]
   [("outputs") #:method "post" outputs]))
  (define-values (dispatcher url-generator)
    (dispatch-rules
     [("candidates") candidates]
     [("register") #:method "post" register]
     [("done") #:method "put" done]
     [("peers") peers]
     [("outputs") #:method "post" outputs]))

(define/contract (internal-server-error url ex)
  (url? any/c . -> . can-be-response?)
  (response/full 400 #"Bad Request" (current-seconds) #f empty empty))
  (define/contract (internal-server-error url ex)
    (url? any/c . -> . can-be-response?)
    (response/full 400 #"Bad Request" (current-seconds) #f empty empty))

(serve/servlet
 dispatcher
 #:port 1984
 #:servlet-regexp #rx""
 #:command-line? #t
 ;; #:servlet-responder internal-server-error
 )
  (serve/servlet
   dispatcher
   #:port 1984
   #:servlet-regexp #rx""
   #:command-line? #t
   ;; #:servlet-responder internal-server-error
   ))