ran-boilerplate
Version:
React . Apollo (GraphQL) . Next.js Toolkit
87 lines (85 loc) • 3.2 kB
JavaScript
;
/**
* Copyright 2017 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
var util_1 = require("../../core/util/util");
/**
* This class ensures the packets from the server arrive in order
* This class takes data from the server and ensures it gets passed into the callbacks in order.
* @constructor
*/
var PacketReceiver = /** @class */ (function () {
/**
* @param onMessage_
*/
function PacketReceiver(onMessage_) {
this.onMessage_ = onMessage_;
this.pendingResponses = [];
this.currentResponseNum = 0;
this.closeAfterResponse = -1;
this.onClose = null;
}
PacketReceiver.prototype.closeAfter = function (responseNum, callback) {
this.closeAfterResponse = responseNum;
this.onClose = callback;
if (this.closeAfterResponse < this.currentResponseNum) {
this.onClose();
this.onClose = null;
}
};
/**
* Each message from the server comes with a response number, and an array of data. The responseNumber
* allows us to ensure that we process them in the right order, since we can't be guaranteed that all
* browsers will respond in the same order as the requests we sent
* @param {number} requestNum
* @param {Array} data
*/
PacketReceiver.prototype.handleResponse = function (requestNum, data) {
var _this = this;
this.pendingResponses[requestNum] = data;
var _loop_1 = function () {
var toProcess = this_1.pendingResponses[this_1.currentResponseNum];
delete this_1.pendingResponses[this_1.currentResponseNum];
var _loop_2 = function (i) {
if (toProcess[i]) {
util_1.exceptionGuard(function () {
_this.onMessage_(toProcess[i]);
});
}
};
for (var i = 0; i < toProcess.length; ++i) {
_loop_2(i);
}
if (this_1.currentResponseNum === this_1.closeAfterResponse) {
if (this_1.onClose) {
this_1.onClose();
this_1.onClose = null;
}
return "break";
}
this_1.currentResponseNum++;
};
var this_1 = this;
while (this.pendingResponses[this.currentResponseNum]) {
var state_1 = _loop_1();
if (state_1 === "break")
break;
}
};
return PacketReceiver;
}());
exports.PacketReceiver = PacketReceiver;
//# sourceMappingURL=PacketReceiver.js.map