ok, after some mailing with Kenny - this works:

(defpackage CellsChat
 (:use :cl :cells))
(in-package :CellsChat)


(defparameter *newline* (princ-to-string #\Newline))



(defmodel Participant ()
 ((chat :cell nil :accessor chat-of :initarg :chat
        :initform (error "Participants need something for its `chat'-slot."))

  (username :cell nil :accessor username-of :initarg :username
            :initform (error "CellsChat needs a `username'."))

  (speech :cell :ephemeral :accessor speech-of :initarg :speech
          :initform (c-in nil))))



(defmethod initialize-instance :after ((participant Participant) &key)
 (push participant (participants-of (chat-of participant))))



(defobserver speech ((participant Participant))
 ;; `new-value' always refers to the slot `speech'
 ;; since that is what we're observing
 (when new-value
   (dolist (participant (participants-of (chat-of participant)))
     (format t "Update interface for '~A', appending: ~A~%"
             (username-of participant) new-value))))



(defmethod say ((participant Participant) (what string))
 (setf (speech-of participant)
       (concatenate 'string (username-of participant) ": " what *newline*)))



(defmodel Chat ()
 ((text-box :accessor text-box-of
            :initform (c? (concatenate 'string
                                       ;; conversation till now..
                                       (or .cache "")
                                       ;; well, ok then - this is neat O_o
                                       (some 'speech-of
(participants-of self)))))

  (participants  :accessor participants-of
                 :initform (c-in nil))))



(defun testChat ()
 (let* ((chat (make-instance 'Chat))
        (user1 (make-instance 'Participant :username "user1" :chat chat))
        (user2 (make-instance 'Participant :username "user2" :chat chat)))
   (say user1 "Hello, anyone here?")
   (say user2 "Well hello there - I'm here :)")
   (say user1 "Cool .. what's up?")
   (say user2 "Just doing some Lisp-hacking -- you?")
   (say user1 "Naaaw .. nothing; I'm kind of tired, so I'm just
sitting in the sun here listening to some music")))


..pretty darn cool :)

--
Mvh,
Lars Rune Nøstdal
http://lars.nostdal.org/
_______________________________________________
cells-devel site list
[email protected]
http://common-lisp.net/mailman/listinfo/cells-devel

Reply via email to