- 'use strict';
-
- const debug = require('debug')('Cantabile');
- const EndPoint = require('./EndPoint');
- const fetch = require('node-fetch');
-
- /**
- * Provides access to Cantabile's engine object for start/stop control
- *
- * Access this object via the {{#crossLink "Cantabile/engine:property"}}{{/crossLink}} property.
- *
- * @class Engine
- * @extends EndPoint
- */
- class Engine
- {
- constructor(owner)
- {
- this.owner = owner;
- }
-
- /**
- * Returns a promise to provide the started state of Cantabile's audio engine.
- *
- * This API is only available via AJAX, and not WebSocket
- *
- * @method isStarted
- * @type {Promise|Boolean}
- */
- async isStarted()
- {
- let f = await fetch(EndPoint.joinPath(this.owner.hostUrl, "api/engine/")).then(r => r.json());
- return f.isStarted;
- }
-
- /**
- * Starts Cantabile's audio engine
- *
- * This API is only available via AJAX, and not WebSocket
- *
- * @method start
- * @type {Promise}
- */
- async start()
- {
- await fetch(EndPoint.joinPath(this.owner.hostUrl, "api/engine/start"), { method: "POST" });
- }
-
- /**
- * Stops Cantabile's audio engine
- *
- * This API is only available via AJAX, and not WebSocket
- *
- * @method start
- * @type {Promise}
- */
- async stop()
- {
- await fetch(EndPoint.joinPath(this.owner.hostUrl, "api/engine/stop"), { method: "POST" });
- }
-
- /**
- * Restarts Cantabile's audio engine
- *
- * This API is only available via AJAX, and not WebSocket
- *
- * @method restart
- * @type {Promise}
- */
- async restart()
- {
- await fetch(EndPoint.joinPath(this.owner.hostUrl, "api/engine/restart"), { method: "POST" });
- }
-
- /**
- * Toggles the audio engine between started and stopped
- *
- * This API is only available via AJAX, and not WebSocket
- *
- * @method restart
- * @type {Promise}
- */
- async startStop()
- {
- await fetch(EndPoint.joinPath(this.owner.hostUrl, "api/engine/startStop"), { method: "POST" });
- }
-
- }
-
-
-
- module.exports = Engine;
-