Make rpc-service take multiple patterns

This commit is contained in:
Tony Garnock-Jones 2012-01-11 17:46:53 -05:00
parent e8e87e338d
commit c4d74d2cab
1 changed files with 13 additions and 11 deletions

View File

@ -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)))