| Paste number 12902: | Key-value server without the generic server abstraction |
| Pasted by: | yome |
| 3 years, 2 months ago | |
| #scheme | |
| Paste contents: |
| (define (key-value-server) (let loop ((state '())) (recv ((from tag ('lookup key)) (! from (list tag (assq key state))) (loop state)) ((from tag 'dump) (! from (list tag state)) (loop state)) (('insert! key value) (loop (cons (cons key value) state))) ('shutdown (info "key-value server shutting down")) (msg (warning "unknown message received" msg))))) (define (kvs-lookup server key) (!? server (list 'lookup key))) (define (kvs-dump server) (!? server 'dump)) (define (kvs-insert! server key value) (! server (list 'insert! key value))) (define (kvs-start) (spawn key-value-server)) (define (test) (let ((kvs (kvs-start))) (kvs-insert! kvs 'foo 42) (kvs-lookup kvs 'foo))) ;; ==> 42 |
Annotations for this paste:
| Annotation number 1: | Key-value server with the generic server abstraction |
| Pasted by: | yome |
| 3 years, 2 months ago | |
| Paste contents: |
| (define key-value-server-plugin (make-server-plugin ;; init (lambda (args) '()) ;; call (lambda (term state) (match term (('lookup key) (values (assq key state) state)) ('dump (values state state)))) ;; cast (lambda (term state) (match term (('insert! key value) (cons (cons key value) state)))) ;; shutdown (lambda (state) (info "key-value server shutting down")) )) (define (kvs2-start) (server:start key-value-server-plugin)) (define (kvs2-lookup server key) (server:call server (list 'lookup key))) (define (kvs2-dump server) (server:call server 'dump)) (define (kvs2-insert! server key value) (server:cast server (list 'insert! key value))) (define (test2) (let ((kvs (kvs2-start))) (kvs2-insert! kvs 'foo 42) (kvs2-lookup kvs 'foo) )) ;; => 42 |