Browse Source

pubsub shorthands

add-remove-to-filo-queue
Christopher Lemmer Webber 6 years ago
parent
commit
2df5f0ba28
No known key found for this signature in database
GPG Key ID: 4BC025925FF8F4D3
  1. 30
      goblins/actor-lib/pubsub.rkt

30
goblins/actor-lib/pubsub.rkt

@ -9,19 +9,16 @@
;; TODO: Needs to be updated to support captp disconnects
(define (^pubsub bcom [subscribers (seteq)])
(methods
[(subscribe subscriber)
(bcom (^pubsub bcom (set-add subscribers subscriber)))]
[(unsubscribe subscriber)
(bcom (^pubsub bcom (set-remove subscribers subscriber)))]
[(subscribers) subscribers]
[publish
(define (subscribe subscriber)
(bcom (^pubsub bcom (set-add subscribers subscriber))))
(define (unsubscribe subscriber)
(bcom (^pubsub bcom (set-remove subscribers subscriber))))
(define publish
(make-keyword-procedure
(lambda (kws kw-vals . args)
(for ([subscriber subscribers])
(keyword-apply <-np kws kw-vals subscriber args))))]
[publish-except
(keyword-apply <-np kws kw-vals subscriber args)))))
(define publish-except
(make-keyword-procedure
(lambda (kws kw-vals excluding . args)
(define subscriber-subset
@ -31,7 +28,18 @@
[(? list?)
(set-subtract subscribers (list->seteq excluding))]))
(for ([subscriber subscriber-subset])
(keyword-apply <-np kws kw-vals subscriber args))))]))
(keyword-apply <-np kws kw-vals subscriber args)))))
(methods
[subscribe subscribe]
[unsubscribe unsubscribe]
[publish publish]
[publish-except publish-except]
;; shorthands
[sub subscribe]
[unsub unsubscribe]
[pub publish]
[pub-except publish-except]
[(subscribers) subscribers]))
(module+ test
(require "../vat.rkt"

Loading…
Cancel
Save