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
3 years, 2 months ago
#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
3 years, 2 months ago
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.