git.fiddlerwoaroof.com
main.lisp
6bc25d4c
 (in-package :documentation-server)
 
 (defclass chat-room (hunchensocket:websocket-resource)
   ((name :initarg :name :initform (error "Name this room!") :reader name))
   (:default-initargs :client-class 'user))
 
 (defclass user (hunchensocket:websocket-client)
   ((name :initarg :user-agent :reader name :initform (error "Name this user!"))))
 
 
 (defvar *chat-room* (list (make-instance 'chat-room :name "/bongo")
                           (make-instance 'chat-room :name "/fury")))
 
 (defun find-room (request)
   (find (hunchentoot:script-name request) *chat-room*
         :test #'string=
         :key #'name))
 
 (defun broadcast (room message &rest args)
   (loop for peer in (hunchensocket:clients room)
      do (hunchensocket:send-text-message peer (apply #'format nil message args))))
 
 (defmethod hunchensocket:client-connected ((room chat-room) user)
   (broadcast room "user connected ~a" (name user)))
 
 (defmethod hunchensocket:client-disconnected ((room chat-room) user)
   (broadcast room "user disconnected ~a" (name user)))
 
 (defmethod hunchensocket:text-message-received ((room chat-room) user message)
   (broadcast room "~a says ~a" (name user) message))