Paste number 12902: Key-value server without the generic server abstraction

Index of paste annotations: 1

Paste number 12902: Key-value server without the generic server abstraction
Pasted by: yome
When:3 years, 8 months ago
Share:Tweet this! | http://paste.lisp.org/+9YE
Channel:#scheme
Paste contents:
Raw Source | XML | Display As
(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
When:3 years, 8 months ago
Share:Tweet this! | http://paste.lisp.org/+9YE#1
Paste contents:
Raw Source | Display As
(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

Colorize as:
Show Line Numbers
Index of paste annotations: 1

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.