bugafriend/bugafriend/user.scm

38 lines
1.2 KiB
Scheme

(define-module (bugafriend user)
#:use-module (bugafriend room)
#:use-module (goblins)
#:use-module (goblins ocapn ids)
#:use-module (goblins actor-lib methods)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:export (^user))
(define-record-type <room-data>
(make-room-data room presence)
room-data?
(room room-data-room)
(presence room-data-presence))
(define (^user bcom logger name room-data)
(methods
[(room) (and room-data (room-data-room room-data))]
[(presence) (and room-data (room-data-presence room-data))]
[(make-room)
(let* ((my-presence (spawn ^room-presence logger name))
(room (spawn ^room my-presence))
(room-data (make-room-data room my-presence)))
(bcom (^user bcom logger name room-data)))]
[(join-room room)
(let ((my-presence (spawn ^room-presence logger name)))
(when room-data
(<-np (room-data-room room-data) 'kick-user (room-data-presence room-data)))
(<- room 'add-user my-presence)
(bcom (^user bcom logger name (make-room-data room my-presence))))]
[(leave-room room)
(when (eq? room (room-data-room room-data))
(<-np room 'kick-user (room-data-presence room-data))
(bcom (^user bcom logger name #f)))]))