music-chat-server.lisp 990 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. (in-package :server)
  2. (defvar *music-connections* (make-hash-table))
  3. (defun handle-new-music-connection (con env)
  4. (setf (gethash con *music-connections*)
  5. (current-id env)))
  6. (defun broadcast-music-to-room (connection message)
  7. (declare (ignore connection))
  8. (loop :for con :being :the :hash-key :of *music-connections* :do
  9. (websocket-driver:send con message)))
  10. (defun handle-close-music-connection (connection)
  11. (remhash connection *music-connections*))
  12. (defun music-chat-server (env)
  13. (let ((ws (websocket-driver:make-server env)))
  14. (websocket-driver:on :open ws
  15. (lambda () (handle-new-music-connection ws env)))
  16. (websocket-driver:on :message ws
  17. (lambda (msg) (broadcast-music-to-room ws msg)))
  18. (websocket-driver:on :close ws
  19. (lambda (&key code reason)
  20. (declare (ignore code reason))
  21. (handle-close-music-connection ws)))
  22. (lambda (responder)
  23. (declare (ignore responder))
  24. (websocket-driver:start-connection ws))))