(use bokbok) (use matchable) (define *server* #f) (define (user->key username) (match username ("myuser" (passphrase->key "mypassphrase")) (else #f))) (define (open-handler con) (printf "CONNECTION from ~a@~s\n" (connection-user con) (connection-addr con)) (void)) (define (request-handler con request) (match request (("ping" string) (list "pong" string)) (("asynch") (thread-start! (make-thread (lambda () (printf "Asynch 1\n") (request! con '("callback" "1")) (thread-sleep! 1) (printf "Asynch 2\n") (request! con '("callback" "2")) (thread-sleep! 1) (printf "Asynch 3\n") (request! con '("callback" "3")) (thread-sleep! 1) (printf "Asynch 4\n") (request! con '("callback" "4"))))) ;; Return this while the callback thread runs in the background (printf "Returning from asynch\n") (list "ok")) (("shutdown-server!") (stop-server! *server*)) (else (error "Unknown request" request)) )) (define (close-handler con) (printf "DISCONNECTION from ~a@~s\n" (connection-user con) (connection-addr con)) (void)) (set! *server* (start-server '(tcp #f 12345) 10 #f #;user->key open-handler request-handler close-handler)) (wait-until-server-stopped *server*)