Avoid silly use of macro

This commit is contained in:
Tony Garnock-Jones 2019-05-02 23:12:02 +01:00
parent 25fb492083
commit b09aef3912
1 changed files with 44 additions and 40 deletions

View File

@ -80,18 +80,18 @@
(begin/dataflow (log-syndicate/federation-debug "::: ~a specs ~v" nodeid (specs))) (begin/dataflow (log-syndicate/federation-debug "::: ~a specs ~v" nodeid (specs)))
(begin/dataflow (log-syndicate/federation-debug "::: ~a subs ~v" nodeid (subs)))) (begin/dataflow (log-syndicate/federation-debug "::: ~a subs ~v" nodeid (subs))))
(define-syntax with-localid->sub (define (call-with-sub localid connid f)
(syntax-rules (->)
((_ (localid connid -> sub) body ...)
(match (hash-ref (subs) localid #f) (match (hash-ref (subs) localid #f)
[#f (log-syndicate/federation-error [#f (log-syndicate/federation-error
"Mention of nonexistent local ID ~v from connection ~v. Ignoring." "Mention of nonexistent local ID ~v from connection ~v. Ignoring."
localid localid
connid)] connid)]
[sub body ...])))) [sub (f sub)]))
(define (unsubscribe! localid connid) (define (unsubscribe! localid connid)
(with-localid->sub [localid connid -> sub] (call-with-sub
localid connid
(lambda (sub)
(define new-holders (hash-remove (subscription-holders sub) connid)) (define new-holders (hash-remove (subscription-holders sub) connid))
(specs (hash-remove (specs) (subscription-spec sub))) (specs (hash-remove (specs) (subscription-spec sub)))
(subs (if (hash-empty? new-holders) (subs (if (hash-empty? new-holders)
@ -111,17 +111,19 @@
(send! (router-outbound peer (Unsubscribe localid)))))] (send! (router-outbound peer (Unsubscribe localid)))))]
[1 (for [(peer (in-hash-keys new-holders))] ;; there will only be one, ≠ connid [1 (for [(peer (in-hash-keys new-holders))] ;; there will only be one, ≠ connid
(send! (router-outbound peer (Unsubscribe localid))))] (send! (router-outbound peer (Unsubscribe localid))))]
[_ (void)]))) [_ (void)]))))
(define (adjust-matches localid connid captures delta expected-outcome ctor) (define (adjust-matches localid connid captures delta expected-outcome ctor)
(with-localid->sub [localid connid -> sub] (call-with-sub
localid connid
(lambda (sub)
(define-values (new-matches outcome) (define-values (new-matches outcome)
(bag-change (subscription-matches sub) captures delta #:clamp? #t)) (bag-change (subscription-matches sub) captures delta #:clamp? #t))
(subs (hash-set (subs) localid (struct-copy subscription sub [matches new-matches]))) (subs (hash-set (subs) localid (struct-copy subscription sub [matches new-matches])))
(when (eq? outcome expected-outcome) (when (eq? outcome expected-outcome)
(for ([(peer peer-subid) (in-hash (subscription-holders sub))]) (for ([(peer peer-subid) (in-hash (subscription-holders sub))])
(when (not (equal? peer connid)) (when (not (equal? peer connid))
(send! (router-outbound peer (ctor peer-subid captures)))))))) (send! (router-outbound peer (ctor peer-subid captures)))))))))
(during (observe (router-connection nodeid $connid)) (during (observe (router-connection nodeid $connid))
(assert (router-connection nodeid connid)) (assert (router-connection nodeid connid))
@ -215,9 +217,11 @@
(relay-add-or-del localid captures -1 'present->absent Del)) (relay-add-or-del localid captures -1 'present->absent Del))
(on (message (router-inbound connid (Msg $localid $captures))) (on (message (router-inbound connid (Msg $localid $captures)))
(with-localid->sub [localid connid -> sub] (call-with-sub
localid connid
(lambda (sub)
(for ([(peer peer-subid) (in-hash (subscription-holders sub))]) (for ([(peer peer-subid) (in-hash (subscription-holders sub))])
(when (not (equal? peer connid)) (when (not (equal? peer connid))
(send! (router-outbound peer (Msg peer-subid captures))))))) (send! (router-outbound peer (Msg peer-subid captures))))))))
))) )))