You've already forked matrix-js-sdk
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:
@@ -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.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user