const internals = {
- kSocketUrl: 'ws://localhost:8000',
+ kSocketUrl: 'https://junction.tranquil.services',
+ kIceServers: [
+ {url:"stun:stun.l.google.com:19302"}
+ ],
port: null,
socket: null,
- peers: 0,
+ peers: {},
onMessage(message) {
internals[message.action](message.data);
internals.tada = data.tada; // Keeping for fun
try {
- await Media.start();
+ const mediaStream = await Media.start();
internals.socket = io(internals.kSocketUrl, {
transports: ['websocket']
internals.socket.on('addPeer', function(data) {
console.log(data);
- Peers.add('id-'+Peers.count(), internals.tada);
+ Peers.add(data.peer_id, internals.tada);
+ const peerId = data.peer_id;
+
+ const peerConn = new RTCPeerConnection(
+ {"iceServers": internals.kIceServers},
+ {"optional": [{"DtlsSrtpKeyAgreement": true}]}
+ );
+
+ internals.peers[peerId] = peerConn;
+
+ peerConn.onicecandidate = (event) => {
+ if (event.candidate) {
+ internals.socket.emit('relayICECandidate', {
+ 'peer_id': peerId,
+ 'ice_candidate': {
+ 'sdpMLineIndex': event.candidate.sdpMLineIndex,
+ 'candidate': event.candidate.candidate
+ }
+ });
+ }
+ }
+
+ peerConn.onaddstream = (stream) => {
+ console.log(`Received stream for peer ${peerId}`);
+ console.log(stream);
+ }
+
+ peerConn.addStream(mediaStream);
+
+ if (data.should_create_offer) {
+ console.log("Creating RTC offer to ", peerId);
+ peerConn.createOffer((local_description) => {
+ console.log("Local offer description is: ", local_description);
+ peerConn.setLocalDescription(local_description, () => {
+ internals.socket.emit('relaySessionDescription', {
+ 'peer_id': peerId,
+ 'session_description': local_description
+ });
+
+ console.log("Offer setLocalDescription succeeded");
+ }, () => { console.log("Offer setLocalDescription failed!"); }
+ );
+ },
+ (error) => { console.log("Error sending offer: ", error) }
+ );
+ }
console.log(`There are now ${Peers.count()} participants`);
});
socket.on('join', (data) => {
socket.join(data.url);
- const sockets = server.sockets.adapter.rooms.get(data.url);
+ const sockets = server.of(data.url).sockets.keys();
sockets.forEach((peerId) => {
if (peerId !== me) {
const peer = server.sockets.sockets.get(peerId)
});
socket.on('relayICECandidate', (data) => {
- const sockets = server.sockets.adapter.rooms.get(data.url);
+ const sockets = server.of(data.url).sockets.keys();
sockets.forEach((peerId) => {
const peer = server.sockets.sockets.get(peerId)
peer.emit(events.types.ICE_CANDIDATE_RECEIVED, events.ICECandidateReceived(me, data.ice_candidate))
});
socket.on('relaySessionDescription', (data) => {
- const sockets = server.sockets.adapter.rooms.get(data.url);
+ const sockets = server.of(data.url).sockets.keys();
sockets.forEach((peerId) => {
const peer = server.sockets.sockets.get(peerId)
peer.emit(events.types.SESSION_DESCRIPTION_RECEIVED, events.SessionDescriptionReceived(me, data.session_description))