1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-08-16 18:21:59 +03:00

Shelve scheduler queue work. Add processFn.

This commit is contained in:
Kegan Dougal
2015-06-18 13:56:46 +01:00
parent 7e12ea4273
commit 1e3162128a
2 changed files with 34 additions and 17 deletions

View File

@@ -9,18 +9,20 @@ var utils = require("./utils");
/**
* Construct a scheduler for Matrix.
* @constructor
* @param {module:scheduler~processFn} processFn Required. The function that can
* process events in the queue.
* @param {module:scheduler~retryAlgorithm} retryAlgorithm Optional. The retry
* algorithm to use.
* algorithm to apply when determining when to try to send an event again.
* Defaults to {@link module:scheduler~MatrixScheduler.RETRY_BACKOFF_RATELIMIT}.
* @param {module:scheduler~queueAlgorithm} queueAlgorithm Optional. The queuing
* algorithm to use.
* @prop {module:scheduler~retryAlgorithm} retryAlgorithm The retry algorithm to
* apply when determining when to try to send an event again. Defaults to
* {@link module:scheduler~MatrixScheduler.RETRY_BACKOFF_RATELIMIT}.
* @prop {module:scheduler~queueAlgorithm} queueAlgorithm The queuing algorithm
* to apply when determining which events should be sent before the given event.
* Defaults to {@link module:scheduler~MatrixScheduler.QUEUE_MESSAGES}.
* algorithm to apply when determining which events should be sent before the
* given event. Defaults to {@link module:scheduler~MatrixScheduler.QUEUE_MESSAGES}.
*/
function MatrixScheduler(retryAlgorithm, queueAlgorithm) {
function MatrixScheduler(processFn, retryAlgorithm, queueAlgorithm) {
if (!utils.isFunction(processFn)) {
throw new Error("processFn must be a function.");
}
this.processFn = processFn;
this.retryAlgorithm = retryAlgorithm || MatrixScheduler.RETRY_BACKOFF_RATELIMIT;
this.queueAlgorithm = queueAlgorithm || MatrixScheduler.QUEUE_MESSAGES;
this._queues = {
@@ -29,7 +31,14 @@ function MatrixScheduler(retryAlgorithm, queueAlgorithm) {
}
/**
* Remove the head of the queue.
* Makes the scheduler start processing events in the queues if it isn't already.
*/
MatrixScheduler.prototype.checkQueuesRunning = function() {
// TODO
};
/**
* Remove the head of the queue. Reduces the length of the queue by 1.
* @param {string} queueName The name of the queue to get the event from.
* @return {MatrixEvent} The head of the queue or <code>null</code>.
*/
@@ -38,7 +47,7 @@ MatrixScheduler.prototype.removeNextEvent = function(queueName) {
if (!utils.isArray(queue)) {
return null;
}
return queue[0];
return queue.shift();
};
/**
@@ -56,16 +65,15 @@ MatrixScheduler.prototype.addEventToQueue = function(queueName, event) {
/**
* Queue an event if it is required.
* @param {MatrixEvent} event The event that may be queued.
* @return {Promise} A promise which will be resolved when the event is sent, if
* it has been added to a queue, else <code>null</code>.
* @return {boolean} True if the event was queued, else false.
*/
MatrixScheduler.prototype.queueEvent = function(event) {
var queueName = this.queueAlgorithm(event);
if (!queueName) {
return null;
return false;
}
this.addEventToQueue(queueName, event);
// TODO: Return a promise
return true;
};
/**
@@ -124,7 +132,7 @@ MatrixScheduler.QUEUE_MESSAGES = function(event) {
* {@link module:models/event.EventStatus.NOT_SENT} and will not be retried.
*/
/**
/**
* The queuing algorithm to apply to events. All queues created are serviced in
* a FIFO manner. To send the event ASAP, return <code>null</code> which will
* not put this event in a queue. Events that fail to send that form part of
@@ -137,6 +145,13 @@ MatrixScheduler.QUEUE_MESSAGES = function(event) {
* the event is not put into a queue and will be sent concurrently.
*/
/**
* The function to invoke to process (send) events in the queue.
* @callback processFn
* @param {MatrixEvent} event The event to send.
* @return {Promise} Resolves to the HTTP response, rejects with an HTTP error.
*/
/**
* The MatrixScheduler class.
*/