|
|
|
|
@ -756,11 +756,11 @@
|
|
|
|
|
[(op:deliver to-desc method |
|
|
|
|
args-marshalled |
|
|
|
|
kw-args-marshalled |
|
|
|
|
answer-pos |
|
|
|
|
;; answer-pos is either an integer (promise pipelining) |
|
|
|
|
;; or #f (no pipelining) |
|
|
|
|
(and (or (? integer?) #f) |
|
|
|
|
answer-pos) |
|
|
|
|
resolve-me-desc) |
|
|
|
|
(define-values (_answer-promise answer-resolver) |
|
|
|
|
(install-answer! answer-pos resolve-me-desc)) |
|
|
|
|
|
|
|
|
|
(define args |
|
|
|
|
(incoming-post-unmarshall! args-marshalled)) |
|
|
|
|
(define kw-args |
|
|
|
|
@ -770,7 +770,26 @@
|
|
|
|
|
(kws-hasheq->kws-lists kw-args)) |
|
|
|
|
(define sent-promise |
|
|
|
|
(keyword-apply <- kws kw-vals target args)) |
|
|
|
|
($ answer-resolver 'fulfill sent-promise) |
|
|
|
|
;; We're either resolving the to the answer promise we create |
|
|
|
|
;; or we're resolving to the actual object described by resolve-me-desc |
|
|
|
|
;; |
|
|
|
|
;; The former case is an indirection because messages pipelined |
|
|
|
|
;; to a to-be-answered object are simply sent to a local promise |
|
|
|
|
;; which will eventually resolve to the answer. |
|
|
|
|
;; |
|
|
|
|
;; It's possible that something more efficient could be done |
|
|
|
|
;; than throwing in an intermediate promise pair that we inform the |
|
|
|
|
;; other side of; maybe re-evaluate when we handle |
|
|
|
|
;; automatic-severance-on-session-disconnect. |
|
|
|
|
(cond |
|
|
|
|
[answer-pos |
|
|
|
|
(define-values (_answer-promise answer-resolver) |
|
|
|
|
(install-answer! answer-pos resolve-me-desc)) |
|
|
|
|
($ answer-resolver 'fulfill sent-promise)] |
|
|
|
|
[else |
|
|
|
|
(define to-resolve |
|
|
|
|
(maybe-install-import! resolve-me-desc)) |
|
|
|
|
(<-np to-resolve 'fulfill sent-promise)]) |
|
|
|
|
(void)] |
|
|
|
|
|
|
|
|
|
;; TODO: Here's where we have to record that a listening interest |
|
|
|
|
|