UNPKG

active-switching

Version:

NPAW's SDK for CDN Balancing and P2P

150 lines (149 loc) 4.37 kB
import Emitter from './Util/Emitter'; import Util from './Util/Util'; import P2PLoader from './../Loaders/P2PLoader'; /** * @class * @description Communication class that manages communication with a websocket tracker and gets peer candidates. * @extends Emitter * @exports P2PManager */ export default class P2PManager extends Emitter { static Util: typeof Util; static Constants: { trackerInterval: number; trackerCommunicationWait: number; trackerRetryJoinTime: number; Token: string; Default: { AnnouncePeers: number; MaxAnnouncePeers: number; }; iceServers: { iceServers: { urls: string[]; }[]; }; AnnounceEvents: { Offer: string; Offers: string; Candidates: string; Answer: string; Join: string; }; WSCommEvents: { Connected: string; Data: string; Error: string; Closed: string; Warning: string; }; WebRtcEvents: { Peer: string; PeerUpdate: string; Update: string; Error: string; Warning: string; }; PeerEvents: { Connect: string; Error: string; Close: string; Signal: string; }; }; private readonly _hashId; private readonly _peerId; private readonly _config; private _tracker?; private _peerList; private _sentOffers; private _myOffers; private _tempAnswers; private _tempCandidates; private isOfferProcessStarted; private _loader; private _destroyed; private _peerConnectionErrors; private _maxPeerErrorsConnectionToBan; /** * @constructs P2PManager * @param {string} hashId ID of the content as string, to be hashed. * @param {P2PConfig} config Configuration JSON, including the tracker URL, iceServers... * @param {string?} peerId Optional, ID of the peer/user, if not set a random one will be generated. * @public */ constructor(loader: P2PLoader, hashId: string, config: P2PConfig, peerId?: string); getId(): string; /** * Starts the communication with the websocket tracker * @public */ start(): void; /** * Ends the communication with the websocket tracker * @public */ stop(): void; /** * Destroys the tracker reference and stops the communication * @public */ destroy(): void; /** * Sends a message to the tracker if available * @param {trackerMessage} message JSON object with the data to be sent to the tracker. * @private */ private _sendWsMessage; /** * Generates an array of offers to be used/sent to the tracker so we can get answers to connect to peers * @private */ private _generateAndSendOfferList; /** * Creates a peer to offer it, or to send it as answer. * @param {string} id ID of the peer to be created. * @param {boolean} initiator By defult true, if it has to generate the offer. If not generates the answer. * @returns {Peer.Instance} Peer object waiting for events/responses * @private */ private _createPeer; /** * Callback for data events from the tracker * It manages all the events used: Offer, Candidates, Answer, Join * @param {callbackData} e event callback data * @private */ private _dataReceived; /** * Handles tracker join event * @param {joinResponse} e event callback data * @private */ private _handleJoin; /** * Handles tracker answer event * @param {answerData} e event callback data * @private */ private _handleAnswer; /** * Handles connection after answer or candidates event * @param {answerObject} answer answer callback data/object */ private _manageAnswer; /** * Handles tracker candidates event * @param {candidatesData} e event callback data * @private */ private _handleCandidates; /** * Handles tracker offer event * @param {offerData} e event callback data * @private */ private _handleOffer; private static parseCandidate; test(): void; }