bokbok
Top-level Files of 67a94a35f3966f20
Login

Files in the top-level directory of check-in 67a94a35f3966f20


Introduction

Bokbok is a toolkit for exposing and consuming APIs between processes.

It supports:

Usage

$ chicken-install bokbok

As a client

(use bokbok)

;; Called if server sends us a callback request (define (request-handler con request) (match request (("callback" num) (printf "Callback received: ~s\n" num)) (else (error "Unrecognised callback"))))

;; Called if server closes the connection (define (close-handler con) (void))

(define con (open-connection '(tcp "myserver" 12345) "myuser" (passphrase->key "mypassphrase") request-handler close-handler))

(printf "Response is ~s\n" (request! con '("ping" "12345")))

(printf "Response is ~s\n" (request! con '("asynch")))

;; Wait for asynch responses to all arrive (thread-sleep! 10)

(close-connection! con)

As a server

(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 () (request! con '("callback" "1")) (thread-sleep! 1) (request! con '("callback" "2")) (thread-sleep! 1) (request! con '("callback" "3")) (thread-sleep! 1) (request! con '("callback" "4"))))) ;; Return this while the callback thread runs in the background (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 user->key open-handler request-handler close-handler)

(wait-until-0server-stopped server)