stalk-js-webrtc
Version:
S-Talk web-rtc javascript client implementation.
78 lines (70 loc) • 2.18 kB
text/typescript
/**
* S-TAlK webrtc interface.
*
* Copyright 2017 Ahoo Studio.co.th.
*/
import { AbstractPeerConnection, IPC_Estabished, PeerConstructor } from "../index";
import { Peer } from "./Peer";
import { WebRTC } from "./WebRTC";
export class PeerManager implements IPC_Estabished {
peers: Map<string, Peer>;
debug: boolean = false;
constructor(options: { debug: boolean }) {
this.peers = new Map();
this.debug = options.debug;
}
createPeer(options: { id, type, offer }, webrtc: WebRTC) {
let self = this;
let config = {
peer_id: options.id,
offer: options.offer,
pcPeers: this.peers,
stream: webrtc.userMedia.getLocalStream(),
emitter: webrtc.webrtcEvents,
sendHandler: webrtc.send,
debug: self.debug,
iceConfig: webrtc.iceConfig
} as PeerConstructor;
let peer = new Peer(config);
this.peers.set(options.id, peer);
return peer;
}
getPeers(sessionId?: string) {
if (!!sessionId) {
return this.peers.get(sessionId) as Peer;
}
else {
return this.peers;
}
};
removePeers(sessionId: string, webrtc: WebRTC) {
let peer = this.getPeers(sessionId) as Peer;
if (peer) {
peer.pc.close();
webrtc.webrtcEvents.emit(AbstractPeerConnection.PEER_STREAM_REMOVED, peer);
}
this.peers.delete(sessionId);
};
/**
* sends message to all
* use signalling message.
*
* @param {any} message
* @param {any} payload
* @memberof PeerManager
*/
sendToAll(message, payload) {
this.peers.forEach(function (peer) {
peer.send_event(message, payload, { to: peer.id });
});
};
// sends message to all using a datachannel
// only sends to anyone who has an open datachannel
sendDirectlyToAll(channel, message, payload) {
this.peers.forEach(function (peer) {
if (peer.enableDataChannels) {
peer.sendDirectly(channel, message, payload);
}
});
};
}