-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtest-utils.ts
50 lines (41 loc) · 1.28 KB
/
test-utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import Peer, { PeerOptions } from '../src';
declare global {
interface Window {
Peer: typeof Peer;
}
}
export function getPeer(options: PeerOptions = {}) {
const peer: Peer = new window.Peer(options);
peer.on('error', ({ error }) => {
if (error) {
console.error(error.name);
}
});
return peer;
}
export function setupPeers(peer1: Peer, peer2: Peer, stream?: MediaStream) {
peer1.on('signal', async (description) => {
await peer2.signal(description);
});
peer2.on('signal', async (description) => {
await peer1.signal(description);
});
peer1.on('onicecandidates', async (candidates) => {
const promises = candidates.map(async (candidate) => peer2.addIceCandidate(candidate));
await Promise.all(promises);
});
peer2.on('onicecandidates', async (candidates) => {
const promises = candidates.map(async (candidate) => peer1.addIceCandidate(candidate));
await Promise.all(promises);
});
peer1.on('streamRemote', (remoteStream) => {
document.querySelector<HTMLVideoElement>('#video1')!.srcObject = remoteStream;
});
peer2.on('streamRemote', (remoteStream) => {
document.querySelector<HTMLVideoElement>('#video2')!.srcObject = remoteStream;
});
if (stream) {
peer1.addStream(stream);
peer2.addStream(stream);
}
}