Add bulk subscribe support.
This commit is contained in:
@@ -254,15 +254,28 @@ Cosmopolite.prototype.shutdown = function() {
|
|||||||
*
|
*
|
||||||
* Start receiving messages sent to this subject via the onMessage callback.
|
* Start receiving messages sent to this subject via the onMessage callback.
|
||||||
*
|
*
|
||||||
* @param {Cosmopolite.typeSubjectLoose} subject
|
* @param {Cosmopolite.typeSubjectLoose|Array.<Cosmopolite.typeSubjectLoose>}
|
||||||
|
* subjects
|
||||||
* @param {?number=} opt_messages Number of recent messages to request;
|
* @param {?number=} opt_messages Number of recent messages to request;
|
||||||
* 0 for none, -1 for all
|
* 0 for none, -1 for all
|
||||||
* @param {?number=} opt_lastID ID of last message received; fetch messages
|
* @param {?number=} opt_lastID ID of last message received; fetch messages
|
||||||
* since
|
* since
|
||||||
* @return {Promise}
|
* @return {Promise|Array.<Promise>}
|
||||||
*/
|
*/
|
||||||
Cosmopolite.prototype.subscribe = function(subject, opt_messages, opt_lastID) {
|
Cosmopolite.prototype.subscribe = function(subjects, opt_messages, opt_lastID) {
|
||||||
return this.newPromise_(function(resolve, reject) {
|
var single = false;
|
||||||
|
|
||||||
|
if (!(subjects instanceof Array)) {
|
||||||
|
single = true;
|
||||||
|
subjects = [subjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
var ret = [];
|
||||||
|
var rpcs = [];
|
||||||
|
for (var i = 0; i < subjects.length; i++) {
|
||||||
|
var subject = subjects[i];
|
||||||
|
|
||||||
|
ret.push(this.newPromise_(function(resolve, reject) {
|
||||||
/** @type {Cosmopolite.typeSubject} */
|
/** @type {Cosmopolite.typeSubject} */
|
||||||
var canonicalSubject = this.canonicalSubject_(subject);
|
var canonicalSubject = this.canonicalSubject_(subject);
|
||||||
/** @type {string} */
|
/** @type {string} */
|
||||||
@@ -286,7 +299,7 @@ Cosmopolite.prototype.subscribe = function(subject, opt_messages, opt_lastID) {
|
|||||||
args['last_id'] = opt_lastID;
|
args['last_id'] = opt_lastID;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.sendRPC_('subscribe', args, function(response) {
|
var onSuccess = function(response) {
|
||||||
/** @type {string} */
|
/** @type {string} */
|
||||||
var result = response['result'];
|
var result = response['result'];
|
||||||
if (result == 'ok') {
|
if (result == 'ok') {
|
||||||
@@ -303,8 +316,22 @@ Cosmopolite.prototype.subscribe = function(subject, opt_messages, opt_lastID) {
|
|||||||
delete this.subscriptions_[subjectString];
|
delete this.subscriptions_[subjectString];
|
||||||
reject(new Error(result));
|
reject(new Error(result));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
rpcs.push({
|
||||||
|
'command': 'subscribe',
|
||||||
|
'arguments': args,
|
||||||
|
'onSuccess': onSuccess
|
||||||
});
|
});
|
||||||
}.bind(this));
|
}.bind(this)));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sendRPCs_(rpcs);
|
||||||
|
|
||||||
|
if (single) {
|
||||||
|
return ret[0];
|
||||||
|
} else {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -138,6 +138,30 @@ asyncTest('Message round trip without channel', function() {
|
|||||||
cosmo.subscribe(subject, -1);
|
cosmo.subscribe(subject, -1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
asyncTest('Bulk subscribe', function() {
|
||||||
|
expect(2);
|
||||||
|
|
||||||
|
var subject1 = randstring();
|
||||||
|
var subject2 = randstring();
|
||||||
|
var message = randstring();
|
||||||
|
|
||||||
|
var messages = 0;
|
||||||
|
|
||||||
|
var callbacks = {
|
||||||
|
'onMessage': function(e) {
|
||||||
|
equal(e['message'], message, 'message matches');
|
||||||
|
if (++messages == 2) {
|
||||||
|
cosmo.shutdown();
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var cosmo = new Cosmopolite(callbacks, null, randstring());
|
||||||
|
cosmo.sendMessage(subject1, message);
|
||||||
|
cosmo.sendMessage(subject2, message);
|
||||||
|
cosmo.subscribe([subject1, subject2], -1);
|
||||||
|
});
|
||||||
|
|
||||||
asyncTest('Complex object', function() {
|
asyncTest('Complex object', function() {
|
||||||
expect(2);
|
expect(2);
|
||||||
|
|||||||
Reference in New Issue
Block a user