123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- import defaultValue from "./defaultValue.js";
- import defined from "./defined.js";
- import RequestState from "./RequestState.js";
- import RequestType from "./RequestType.js";
- /**
- * Stores information for making a request. In general this does not need to be constructed directly.
- *
- * @alias Request
- * @constructor
- * @param {Object} [options] An object with the following properties:
- * @param {String} [options.url] The url to request.
- * @param {Request.RequestCallback} [options.requestFunction] The function that makes the actual data request.
- * @param {Request.CancelCallback} [options.cancelFunction] The function that is called when the request is cancelled.
- * @param {Request.PriorityCallback} [options.priorityFunction] The function that is called to update the request's priority, which occurs once per frame.
- * @param {Number} [options.priority=0.0] The initial priority of the request.
- * @param {Boolean} [options.throttle=false] Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the request will be throttled and sent based on priority.
- * @param {Boolean} [options.throttleByServer=false] Whether to throttle the request by server.
- * @param {RequestType} [options.type=RequestType.OTHER] The type of request.
- */
- function Request(options) {
- options = defaultValue(options, defaultValue.EMPTY_OBJECT);
- const throttleByServer = defaultValue(options.throttleByServer, false);
- const throttle = defaultValue(options.throttle, false);
- /**
- * The URL to request.
- *
- * @type {String}
- */
- this.url = options.url;
- /**
- * The function that makes the actual data request.
- *
- * @type {Request.RequestCallback}
- */
- this.requestFunction = options.requestFunction;
- /**
- * The function that is called when the request is cancelled.
- *
- * @type {Request.CancelCallback}
- */
- this.cancelFunction = options.cancelFunction;
- /**
- * The function that is called to update the request's priority, which occurs once per frame.
- *
- * @type {Request.PriorityCallback}
- */
- this.priorityFunction = options.priorityFunction;
- /**
- * Priority is a unit-less value where lower values represent higher priority.
- * For world-based objects, this is usually the distance from the camera.
- * A request that does not have a priority function defaults to a priority of 0.
- *
- * If priorityFunction is defined, this value is updated every frame with the result of that call.
- *
- * @type {Number}
- * @default 0.0
- */
- this.priority = defaultValue(options.priority, 0.0);
- /**
- * Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the
- * request will be throttled and sent based on priority.
- *
- * @type {Boolean}
- * @readonly
- *
- * @default false
- */
- this.throttle = throttle;
- /**
- * Whether to throttle the request by server. Browsers typically support about 6-8 parallel connections
- * for HTTP/1 servers, and an unlimited amount of connections for HTTP/2 servers. Setting this value
- * to <code>true</code> is preferable for requests going through HTTP/1 servers.
- *
- * @type {Boolean}
- * @readonly
- *
- * @default false
- */
- this.throttleByServer = throttleByServer;
- /**
- * Type of request.
- *
- * @type {RequestType}
- * @readonly
- *
- * @default RequestType.OTHER
- */
- this.type = defaultValue(options.type, RequestType.OTHER);
- /**
- * A key used to identify the server that a request is going to. It is derived from the url's authority and scheme.
- *
- * @type {String}
- *
- * @private
- */
- this.serverKey = undefined;
- /**
- * The current state of the request.
- *
- * @type {RequestState}
- * @readonly
- */
- this.state = RequestState.UNISSUED;
- /**
- * The requests's deferred promise.
- *
- * @type {Object}
- *
- * @private
- */
- this.deferred = undefined;
- /**
- * Whether the request was explicitly cancelled.
- *
- * @type {Boolean}
- *
- * @private
- */
- this.cancelled = false;
- }
- /**
- * Mark the request as cancelled.
- *
- * @private
- */
- Request.prototype.cancel = function () {
- this.cancelled = true;
- };
- /**
- * Duplicates a Request instance.
- *
- * @param {Request} [result] The object onto which to store the result.
- *
- * @returns {Request} The modified result parameter or a new Resource instance if one was not provided.
- */
- Request.prototype.clone = function (result) {
- if (!defined(result)) {
- return new Request(this);
- }
- result.url = this.url;
- result.requestFunction = this.requestFunction;
- result.cancelFunction = this.cancelFunction;
- result.priorityFunction = this.priorityFunction;
- result.priority = this.priority;
- result.throttle = this.throttle;
- result.throttleByServer = this.throttleByServer;
- result.type = this.type;
- result.serverKey = this.serverKey;
- // These get defaulted because the cloned request hasn't been issued
- result.state = this.RequestState.UNISSUED;
- result.deferred = undefined;
- result.cancelled = false;
- return result;
- };
- /**
- * The function that makes the actual data request.
- * @callback Request.RequestCallback
- * @returns {Promise<void>} A promise for the requested data.
- */
- /**
- * The function that is called when the request is cancelled.
- * @callback Request.CancelCallback
- */
- /**
- * The function that is called to update the request's priority, which occurs once per frame.
- * @callback Request.PriorityCallback
- * @returns {Number} The updated priority value.
- */
- export default Request;
|