| 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;
 |