active-switching
Version:
NPAW's SDK for CDN Balancing and P2P
150 lines (149 loc) • 4.37 kB
TypeScript
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;
}