Wrap room control channel in a struct; renaming to accommodate this

This commit is contained in:
Tony Garnock-Jones 2011-10-22 09:08:23 -04:00
parent 6a968637f8
commit 0e14f7864e
1 changed files with 13 additions and 12 deletions

View File

@ -29,18 +29,19 @@
(struct credit (who amount) #:prefab) ;; give someone an amount of credit
(struct room (name ch members) #:transparent)
(struct room (ch))
(struct blocking-box (ch))
(struct room-state (name ch members) #:transparent)
(struct binding (name in-ch out-ch disconnect-box queue-box thread) #:transparent)
(define (make-room [name (gensym 'room)])
(define ch (make-channel))
(thread (lambda () (room-main (room name ch '()))))
ch)
(thread (lambda () (room-main (room-state name ch '()))))
(room ch))
(define (join-room room [name (gensym 'peer)])
(make-object membership% room name))
(make-object membership% (room-ch room) name))
(define (make-blocking-box)
(blocking-box (make-channel)))
@ -141,14 +142,14 @@
(handle-evt (thread-dead-evt (binding-thread b))
(lambda (dummy)
(room-main (part state b 'EXIT))))))
(handle-evt (room-ch state)
(handle-evt (room-state-ch state)
(match-lambda
(`(join ,name ,in-ch ,out-ch ,disconnect-box ,thread)
(room-main (join state name in-ch out-ch disconnect-box thread)))
(unexpected (log-warning (format "room-main: unexpected message ~v"
unexpected))
(room-main state))))
(room-members state))))
(room-state-members state))))
(define (handle-binding-message state b message)
(match message
@ -170,21 +171,21 @@
(define (membership-summary state)
(map (lambda (member) (arrived (binding-name member)))
(room-members state)))
(room-state-members state)))
(define (add-binding state b)
(struct-copy room state
[members (cons b (room-members state))]))
(struct-copy room-state state
[members (cons b (room-state-members state))]))
(define (remove-binding state b)
(struct-copy room state
[members (remove b (room-members state) eq?)]))
(struct-copy room-state state
[members (remove b (room-state-members state) eq?)]))
(define (broadcast state b message)
(for-each (lambda (member)
(when (not (eq? member b))
(enqueue-message! member message)))
(room-members state))
(room-state-members state))
state)
(define (enqueue-message! b message)