anchor.diff:    (log-message :debug "Going to delete session ~a" (car session))
     (setq *sessions* (delete session *sessions* :test #'eq))
     (setq *websocket-handlers* (delete (getf-session session :dispatcher) *websocket-handlers* :test #'eq)))
  +
  +
  +(defun event-handler (name)
  +  (cdr (assoc name *event-handlers* :test #'string=)))
  +
  +(defun (setf event-handler) (val var)
  +  (push (cons var val) *event-handlers*))
  +
   
   (defun send-disconnect ()
     (websocket-send-message "0::"))
  
positive.code:                                                                       (cons :args lambda-list))))))))
  
  (defun send-ack (id &rest data)
    (websocket-send-message (apply #'concatenate 'string "6:::" id (if data (list "+" (encode-json-to-string data)) (list "")))))
  
  (defun send-error (message &optional advice)
    (websocket-send-message (apply #'concatenate 'string "7:::" message (if advice (list "+" advice) (list "")))))
  
negative.code: (defun handle-ack (id data data-ack-p)
    (cond ((and data-ack-p (not id))
           (log-message :warning "Data acknowledgement requested without id, ignoring"))
          (data-ack-p (send-ack id data))
          (id (send-ack id))))
  
  ; [message type] ':' [message id ('+')] ':' [message endpoint] (':' [message data])
  