   (wait-for-connection [client timeout] (-wait-for-connection client timeout))
   (wait-for-association [client timeout] (-wait-for-association client timeout))
   (send! [client message] (-send! client message))
-  (close [client] (-close client)))
+  (close [client] (-close client))
+  (start-heartbeat-thread [client] (-start-heartbeat-thread client)))
 
 (s/defn ^:always-validate ^:private -connecting? :- s/Bool
   [client :- Client]

        (doseq [session sessions]
          (.. session (getRemote) (sendPing (ByteBuffer/allocate 1))))))
    (log/debug "WebSocket heartbeat task is about to finish")))

(s/defn ^:always-validate ^:private make-connection :- Object
  "Returns a connected websocket connection"

    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,
