anchor.diff:            (format t "~&Client validated: ~A. ~%It's now playing as ~A.~%"
                     client (character-name character))
             (setf (client-character-id client) (character-id character))
  -          (push (session-value 'websocket-clients (client-session client)) client))
  +          (push (session-websocket-clients (client-session client)) client))
           (progn
             (format t "~&No session. Disconnecting client. (~A)~%" client)
             (disconnect-client client)))))
  
positive.code: (defgeneric validate-client (chat-server client))
  
  (defun disconnect-client (client)
    (let ((ws-client (client-ws-client client))
          (session (client-session client)))
      (ws:write-to-client ws-client :close)
      ;; Chrome doesn't seem to pay attention to :close.
      ;; _3b proposes sending a custom 'close' command to Chrome, and closing the socket client-side.
      (ws::client-disconnect ws-client :abort t)
      (when session
        (deletef (session-value 'websocket-clients session)
                 client))))
  
  (defstruct client uri host headers user-agent ws-client session account-name character-id)
  
negative.code:              ("character" . ,user)
               ("dialogue" . ,dialogue))))))
  
  (defun session-websocket-clients (session)
    (session-value 'websocket-clients session))
  (defun (setf session-websocket-clients) (new-value session)
    (setf (session-value 'websocket-clients session) new-value))
  
  ;; clws stuff
  (defgeneric add-client (chat-server client))
  