Wrap room control channel in a struct; renaming to accommodate this
This commit is contained in:
parent
6a968637f8
commit
0e14f7864e
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue