anchor.diff:               (log-message :info "Client tried to connect to additional endpoint"))
               (:heartbeat
                (log-message :debug "Client sent heartbeat")
  -             (setf (getf-session *session* :receive-timestamp) (get-universal-time)))))
  -        (log-message :error "Message is malfomed"))))
  +             (setf (getf-session *session* :receive-timestamp) (get-universal-time)))
  +            (:message
  +             (log-message :debug "Client sent message ~s" data)
  +             (funcall message-handler data))
  +            (:json-message
  +             (log-message :debug "Client sent JSON message ~s" data)
  +             (funcall message-handler (decode-json-from-string data)))
  +            (:event
  +             (log-message :debug "Client sent event message ~s" data)
  +             ; TODO
  +             ; TODO data-ack ? see socket.io/namespace
  +             ))
  +          (when id ; TODO data-ack
  +            (send-ack id)))
  +        (log-message :error "Message is malfomed: ~s" message))))
   
   (defun socket.io-session ()
     (let* ((session-id (uuid:make-v4-uuid))
  
positive.code:     (8 :noop)))
  
  (defun handle-message (message message-handler)
    (declare (ignore message-handler)) ; TODO
    (log-message :debug "Received socket.io message ~s~%" message)
    (multiple-value-bind (match matches)
        ; [message type] ':' [message id ('+')] ':' [message endpoint] (':' [message data])
        (scan-to-strings #>eof>^(\d):(\d+)?(\+)?:([^:]+)?(?::(.+))?eof message)
      (if match
          (destructuring-bind (type id handle-id endpoint data)
              (coerce matches 'list)
            (declare (ignore id handle-id endpoint data)) ; TODO
            (ecase (translate-message-type type)
              (:disconnect
               (log-message :debug "Client signalled termination")
  
negative.code:            (if (consp message)
                 (list 4 message-id (encode-json message))
                 (list 3 message-id message)))))
  
  (defun send-ack (id &optional data)
    (declare (ignore data)) ; TODO
    (websocket-send-message (format nil "6:::~d" id)))
  
  (defun terminate (session)
    (let ((stream (getf-session session :stream)))
  