Make rpc-service take multiple patterns
This commit is contained in:
parent
e8e87e338d
commit
c4d74d2cab
|
@ -55,14 +55,15 @@
|
|||
|
||||
(define-syntax rpc-service
|
||||
(syntax-rules ()
|
||||
[(_ pattern body ...)
|
||||
[(_ [pattern body ...] ...)
|
||||
(let loop ()
|
||||
(wait (message-handlers
|
||||
[`(request ,reply-addr ,pattern)
|
||||
(spawn (lambda ()
|
||||
(define answer (let () body ...))
|
||||
(send `(reply ,reply-addr ,answer))))
|
||||
(loop)])))]))
|
||||
(send `(reply ,reply-addr ,answer))))]
|
||||
...))
|
||||
(loop))]))
|
||||
|
||||
(define (display-driver)
|
||||
(define message (wait (message-handlers [`(display ,message) message])))
|
||||
|
@ -75,11 +76,11 @@
|
|||
(send `(display ,x)))
|
||||
|
||||
(define (read-line-driver)
|
||||
(rpc-service `read-line
|
||||
(wait (message-handlers)
|
||||
(rpc-service
|
||||
[`read-line (wait (message-handlers)
|
||||
(meta-message-handlers
|
||||
[((read-line-evt (current-input-port) 'any) => line)
|
||||
line]))))
|
||||
line]))]))
|
||||
|
||||
(define (read-line)
|
||||
(rpc 'read-line))
|
||||
|
@ -100,11 +101,12 @@
|
|||
(wait-until-time 0))
|
||||
|
||||
(define (sleep-driver)
|
||||
(rpc-service `(sleep ,msecs)
|
||||
(send `(display (Sleeping ,msecs)))
|
||||
(define now (wait-until-time (+ (current-time) msecs)))
|
||||
(send `(display "\n"))
|
||||
now))
|
||||
(rpc-service
|
||||
[`(sleep ,msecs)
|
||||
(send `(display (Sleeping ,msecs)))
|
||||
(define now (wait-until-time (+ (current-time) msecs)))
|
||||
(send `(display "\n"))
|
||||
now]))
|
||||
|
||||
(define (sleep msecs)
|
||||
(rpc `(sleep ,msecs)))
|
||||
|
|
Loading…
Reference in New Issue