Skip to content

Commit 17806d1

Browse files
committed
Merge pull request #22 from kuzzleio/unitTests
Init offline mode
2 parents f9fb04e + 198e220 commit 17806d1

File tree

4 files changed

+739
-23
lines changed

4 files changed

+739
-23
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kuzzle-sdk",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "Official Javascript SDK for Kuzzle",
55
"author": "The Kuzzle Team <[email protected]>",
66
"repository": {

src/kuzzle.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ module.exports = Kuzzle = function (url, options, cb) {
8282
This structure also allows renewing subscriptions after a connection loss
8383
*/
8484
value: {
85-
pending: 0
85+
pending: {}
8686
},
8787
writable: true
8888
},
@@ -243,12 +243,21 @@ function construct(url, cb) {
243243
self.socket.once('connect', function () {
244244
self.state = 'connected';
245245

246+
Object.keys(self.subscriptions).forEach(function (roomId) {
247+
Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) {
248+
var subscription = self.subscriptions[roomId][subscriptionId];
249+
subscription.renew(subscription.callback);
250+
});
251+
});
252+
253+
dequeue.call(self);
254+
246255
if (cb) {
247256
cb(null, self);
248257
}
249258
});
250259

251-
self.socket.once('connect_error', function (error) {
260+
self.socket.on('connect_error', function (error) {
252261
self.state = 'error';
253262

254263
if (cb) {
@@ -664,15 +673,15 @@ Kuzzle.prototype.query = function (collection, controller, action, query, option
664673

665674
if (self.state === 'connected' || (options && options.queuable === false)) {
666675
emitRequest.call(this, object, cb);
667-
} else if (self.queuing) {
676+
} else if (self.queuing|| self.state === 'initializing') {
668677
cleanQueue.call(this, object, cb);
669678

670679
if (self.queueFilter) {
671-
if (self.queueFilter(query)) {
672-
self.offlineQueue.push({ts: Date.now(), query: query, cb: cb});
680+
if (self.queueFilter(object)) {
681+
self.offlineQueue.push({ts: Date.now(), query: object, cb: cb});
673682
}
674683
} else {
675-
self.offlineQueue.push({ts: Date.now(), query: query, cb: cb});
684+
self.offlineQueue.push({ts: Date.now(), query: object, cb: cb});
676685
}
677686
}
678687

src/kuzzleRoom.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ KuzzleRoom.prototype.renew = function (filters, cb) {
161161

162162
this.unsubscribe();
163163
this.subscribing = true;
164-
this.kuzzle.subscriptions.pending++;
164+
self.kuzzle.subscriptions.pending[self.id] = self;
165165

166166
if (filters) {
167167
this.filters = filters;
@@ -170,14 +170,15 @@ KuzzleRoom.prototype.renew = function (filters, cb) {
170170
this.roomId = null;
171171
this.callback = cb;
172172

173-
subscribeQuery = this.kuzzle.addHeaders({body: filters}, this.headers);
173+
subscribeQuery = this.kuzzle.addHeaders({body: self.filters}, this.headers);
174+
174175
self.kuzzle.query(this.collection, 'subscribe', 'on', subscribeQuery, {metadata: this.metadata}, function (error, response) {
175176
if (error) {
176177
/*
177178
If we've already subscribed to this room, Kuzzle returns the actual roomID.
178179
We'll simply ignore the error and acts as if we successfully subscribed.
179180
*/
180-
if (error.details.roomId) {
181+
if (error.details && error.details.roomId) {
181182
self.roomId = error.details.roomId;
182183
} else {
183184
throw new Error('Error during Kuzzle subscription: ' + error.message);
@@ -196,7 +197,8 @@ KuzzleRoom.prototype.renew = function (filters, cb) {
196197
self.kuzzle.socket.on(self.roomId, self.notifier);
197198

198199
self.subscribing = false;
199-
self.kuzzle.subscriptions.pending--;
200+
delete self.kuzzle.subscriptions.pending[self.id];
201+
200202
self.dequeue();
201203
});
202204

@@ -229,11 +231,11 @@ KuzzleRoom.prototype.unsubscribe = function () {
229231
if (Object.keys(self.kuzzle.subscriptions[room]).length === 1) {
230232
delete self.kuzzle.subscriptions[room];
231233

232-
if (self.kuzzle.subscriptions.pending === 0) {
234+
if (Object.keys(self.kuzzle.subscriptions.pending).length === 0) {
233235
self.kuzzle.query(this.collection, 'subscribe', 'off', {body: {roomId: room}});
234236
} else {
235237
interval = setInterval(function () {
236-
if (self.kuzzle.subscriptions.pending === 0) {
238+
if (Object.keys(self.kuzzle.subscriptions.pending).length === 0) {
237239
if (!self.kuzzle.subscriptions[room]) {
238240
self.kuzzle.query(self.collection, 'subscribe', 'off', {body: {roomId: room}});
239241
}

0 commit comments

Comments
 (0)