-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
91 lines (79 loc) · 3.34 KB
/
script.js
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"use strict";
let localmessageInput = document.getElementById("local");
let remotemessageInput = document.getElementById("remote");
let localMessageArea = document.getElementById("localmsg");
let remoteMessageArea = document.getElementById("remotemsg");
localmessageInput.addEventListener("keyup", (event) => {
if (event.key === "Enter") {
addChildMessage(localMessageArea, event.target.value, "right");
localChannel.send(event.target.value);
event.target.value = "";
}
});
remotemessageInput.addEventListener("keyup", (event) => {
if (event.key === "Enter") {
addChildMessage(remoteMessageArea, event.target.value, "right");
remoteChannel.send(event.target.value);
event.target.value = "";
}
});
function log(...text) {
console.log("At time: " + (performance.now() / 1000).toFixed(3) + " --> ", ...text);
}
let config = null;
// config = {
// iceServers: [
// {
// urls: ["stun:stun1.l.google.com:19302", "stun:stun2.l.google.com:19302"],
// },
// ],
// iceCandidatePoolSize: 10,
// };
let localPeer = new RTCPeerConnection(config);
let remotePeer = new RTCPeerConnection(config);
let localChannel = localPeer.createDataChannel("chat");
let remoteChannel = null;
async function init() {
localPeer
.createOffer()
.then((localSDP) => localPeer.setLocalDescription(localSDP))
.then(() => remotePeer.setRemoteDescription(localPeer.localDescription))
.then(() => remotePeer.createAnswer())
.then((remoteSDP) => remotePeer.setLocalDescription(remoteSDP))
.then(() => localPeer.setRemoteDescription(remotePeer.localDescription))
.catch((err) => window.alert(err));
}
localPeer.onconnectionstatechange = () => log("Local coonnection state: ", localPeer.iceConnectionState);
localPeer.oniceconnectionstatechange = () => log("Local ice connection state: ", localPeer.iceConnectionState);
remotePeer.onconnectionstatechange = () => log("Remote coonnection state: ", remotePeer.iceConnectionState);
remotePeer.oniceconnectionstatechange = () => log("Remote ice connection state: ", remotePeer.iceConnectionState);
init();
localPeer.onicecandidate = ({ candidate }) => remotePeer.addIceCandidate(candidate);
remotePeer.onicecandidate = ({ candidate }) => localPeer.addIceCandidate(candidate);
localChannel.onmessage = (event) => {
log("Got message at local side", event);
addChildMessage(localMessageArea, event.data, "left");
};
localChannel.onclose = () => log("Local Connection close");
localChannel.onerror = (event) => log("Connection error at local side", event);
localChannel.onopen = () => log("Local Connection Openned.!!!");
remotePeer.ondatachannel = (event) => {
remoteChannel = event.channel;
remoteChannel.onmessage = (event) => {
log("Got msg at remote side", event);
addChildMessage(remoteMessageArea, event.data, "left");
};
remoteChannel.onclose = (event) => log("Remote Connection close");
remoteChannel.onerror = (event) => log("Connection error at remote side", event);
remoteChannel.onopen = (event) => log("Remote Connection Openned.!!!");
};
function addChildMessage(messageDiv, messageData, align) {
let newMessage = document.createElement("div");
newMessage.innerHTML = messageData;
newMessage.align = align;
if (messageDiv.childNodes.length == 0) {
messageDiv.appendChild(newMessage);
} else {
messageDiv.insertBefore(newMessage, messageDiv.childNodes[0]);
}
}