From ede3185e93d44f9d91bbaa11e0fccfca4681cb1f Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 26 Jan 2015 16:30:33 -0500 Subject: [PATCH] Split out RPC from daemon --- src/daemon.rkt | 32 +------------------------------- src/packages.rkt | 1 + src/rpc.rkt | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 src/rpc.rkt diff --git a/src/daemon.rkt b/src/daemon.rkt index d89625a..2538e04 100644 --- a/src/daemon.rkt +++ b/src/daemon.rkt @@ -1,15 +1,9 @@ #lang racket/base (provide daemonize-thunk - daemon-thread - - rpc-request-evt - rpc-handler - rpc-call - rpc-cast!) + daemon-thread) (require (only-in web-server/private/util exn->string)) -(require racket/match) (define (daemonize-thunk name boot-thunk) (lambda () @@ -28,27 +22,3 @@ (define (daemon-thread name boot-thunk) (thread (daemonize-thunk name boot-thunk))) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(define (rpc-request-evt) - (handle-evt (thread-receive-evt) - (lambda (_) (thread-receive)))) - -(define-syntax-rule (rpc-handler ch-and-req [(argpat ...) body ...] ...) - (match ch-and-req - [(cons ch request) - (define-values (reply-value new-state) - (match request - [(list argpat ...) body ...] - ...)) - (when ch (channel-put ch reply-value)) - new-state])) - -(define (rpc-call thread . request) - (define ch (make-channel)) - (thread-send thread (cons ch request)) - (channel-get ch)) - -(define (rpc-cast! thread . request) - (thread-send thread (cons #f request))) diff --git a/src/packages.rkt b/src/packages.rkt index 63dc758..5184543 100644 --- a/src/packages.rkt +++ b/src/packages.rkt @@ -27,6 +27,7 @@ (require reloadable) (require "config.rkt") (require "daemon.rkt") +(require "rpc.rkt") (require "hash-utils.rkt") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/rpc.rkt b/src/rpc.rkt new file mode 100644 index 0000000..4a717c0 --- /dev/null +++ b/src/rpc.rkt @@ -0,0 +1,30 @@ +#lang racket/base + +(provide rpc-request-evt + rpc-handler + rpc-call + rpc-cast!) + +(require racket/match) + +(define (rpc-request-evt) + (handle-evt (thread-receive-evt) + (lambda (_) (thread-receive)))) + +(define-syntax-rule (rpc-handler ch-and-req [(argpat ...) body ...] ...) + (match ch-and-req + [(cons ch request) + (define-values (reply-value new-state) + (match request + [(list argpat ...) body ...] + ...)) + (when ch (channel-put ch reply-value)) + new-state])) + +(define (rpc-call thread . request) + (define ch (make-channel)) + (thread-send thread (cons ch request)) + (channel-get ch)) + +(define (rpc-cast! thread . request) + (thread-send thread (cons #f request)))