code: def api(command, params = {})
        raise(ConnectionError, 'Connection is not open') unless @connection && @connection.connected?
        
        message_id = @connection.publish(params.merge(:api => command))
  
        # Wait until we get a response for the given message
        data = wait do |&resume|
          on(:response_received, :once => true, :if => {'msgid' => message_id}) {|data| resume.call(data)}
        end
  
        if data['success']
          data
        else
          error = data['error'] || data['err']
          raise APIError, "Command \"#{command}\" failed with message: \"#{error}\""
        end
      end
docs: Runs the given API command.
  
   @api private
   @param [String] command The name of the command to execute
   @param [Hash] params The parameters to pass into the command
   @return [Hash] The data returned from the Turntable service
   @raise [Turntabler::Error] if the connection is not open or the command fails to execute