UNPKG

ran-boilerplate

Version:

React . Apollo (GraphQL) . Next.js Toolkit

85 lines (83 loc) 3.11 kB
/** * 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. */ import { exceptionGuard } from '../../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]) { 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; }()); export { PacketReceiver }; //# sourceMappingURL=PacketReceiver.js.map