 ;; ClientInterface
 (declare -connecting? -connected?
          -associating? -associated?
-         -wait-for-connection -wait-for-association -send! -close)
+         -wait-for-connection -wait-for-association -send! -close
+         -start-heartbeat-thread)
 
 (s/defrecord Client
   [server :- s/Str

                             :should-stop (promise)
                             :user-data user-data})
        {:keys [websocket-connection]} client]
    (.start (Thread. (partial heartbeat client)))
    (reset! websocket-connection (future (make-connection client)))
    client))

    pcp-broker.")
  (close [client]
    "Close the connection.  Once the client is close you will need a
    new one.")
  (start-heartbeat-thread [client]
    "Starts a thread that will periodically send WebSocket pings to the pcp-broker.
    Propagates any unhandled exception thrown while attempting to connect.
    Will raise ::not-connected if the client is not currently connected with the
    pcp-broker."))

(def Handlers
  "schema for handler map.  String keys are data_schema handlers,
