UNPKG

p2p-media-loader-core

Version:
105 lines 3.38 kB
import { Request } from "./request.js"; import * as StreamUtils from "../utils/stream.js"; import * as PeerUtil from "../utils/peer.js"; export class RequestsContainer { constructor(requestProcessQueueCallback, bandwidthCalculators, playback, config, eventTarget, swarmId) { Object.defineProperty(this, "requestProcessQueueCallback", { enumerable: true, configurable: true, writable: true, value: requestProcessQueueCallback }); Object.defineProperty(this, "bandwidthCalculators", { enumerable: true, configurable: true, writable: true, value: bandwidthCalculators }); Object.defineProperty(this, "playback", { enumerable: true, configurable: true, writable: true, value: playback }); Object.defineProperty(this, "config", { enumerable: true, configurable: true, writable: true, value: config }); Object.defineProperty(this, "eventTarget", { enumerable: true, configurable: true, writable: true, value: eventTarget }); Object.defineProperty(this, "swarmId", { enumerable: true, configurable: true, writable: true, value: swarmId }); Object.defineProperty(this, "requests", { enumerable: true, configurable: true, writable: true, value: new Map() }); } get executingHttpCount() { let count = 0; for (const request of this.httpRequests()) { if (request.status === "loading") count++; } return count; } get executingP2PCount() { let count = 0; for (const request of this.p2pRequests()) { if (request.status === "loading") count++; } return count; } get(segment) { return this.requests.get(segment); } getOrCreateRequest(segment) { let request = this.requests.get(segment); if (!request) { const streamSwarmId = StreamUtils.getStreamSwarmId(this.swarmId, segment.stream); const infoHash = PeerUtil.getStreamHash(streamSwarmId); request = new Request(segment, this.requestProcessQueueCallback, this.bandwidthCalculators, this.playback, this.config, this.eventTarget, infoHash); this.requests.set(segment, request); } return request; } remove(request) { this.requests.delete(request.segment); } items() { return this.requests.values(); } *httpRequests() { for (const request of this.requests.values()) { if (request.downloadSource === "http") yield request; } } *p2pRequests() { for (const request of this.requests.values()) { if (request.downloadSource === "p2p") yield request; } } destroy() { for (const request of this.requests.values()) { if (request.status !== "loading") continue; request.cancel(); } this.requests.clear(); } } //# sourceMappingURL=request-container.js.map