diff --git a/presence/conversation.rkt b/presence/conversation.rkt index dcd0bb2..7cbbda2 100644 --- a/presence/conversation.rkt +++ b/presence/conversation.rkt @@ -24,7 +24,7 @@ (struct-out topic) topic-publisher topic-subscriber - co-role + co-roles co-topic ;; Reexported from unify.rkt for convenience @@ -245,20 +245,20 @@ (and es ;; some threads are not standard-threads (exit-status-exception es))) -(define (co-role r) +(define (co-roles r) (case r - [(publisher) 'subscriber] - [(subscriber) 'publisher] + [(publisher) '(subscriber)] + [(subscriber) '(publisher)] [else #f])) -(define (co-topic t) - (struct-copy topic t [role (co-role (topic-role t))])) +(define (co-topic t new-role) + (struct-copy topic t [role new-role])) (define (refine-topic remote-topic new-pattern) (struct-copy topic remote-topic [pattern new-pattern])) (define (roles-intersect? l r) - (eq? l (co-role r))) + (memq l (co-roles r))) ;; Both left and right must be canonicalized. (define (topic-intersection left right) diff --git a/presence/test-conversation.rkt b/presence/test-conversation.rkt index 040106b..4e36d7d 100644 --- a/presence/test-conversation.rkt +++ b/presence/test-conversation.rkt @@ -57,7 +57,9 @@ [(says (and specific-topic (topic 'publisher _ _)) _) (write `(,name acking) o) (newline o) - (send handle say (co-topic specific-topic) (list name 'ack))] + (send handle say + (co-topic specific-topic 'subscriber) + (list name 'ack))] [_ (void)]) (flush-output o) (loop)))