Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2020
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Peer from 'simple-peer'
  2. import Pusher from 'pusher-js';
  3.  
  4.  
  5. Pusher.logToConsole = true;
  6. let statusText = document.getElementById('status');
  7. let peers = {};
  8.  
  9. let userStream = null;
  10. let mainUserId = getRandomInt(999999).toString();
  11.  
  12. let chatId = 1;
  13.  
  14. let channel = null;
  15.  
  16. console.log('ID: ', mainUserId);
  17.  
  18. statusText.textContent = 'Запрос на права';
  19.  
  20. getPermissions().then(stream => {
  21.     userStream = stream;
  22.  
  23.     statusText.textContent = 'Успешно... Нажмите Call';
  24. });
  25.  
  26. window.peerCall = function() {
  27.     const peerId = document.querySelector('#peerCaller');
  28.  
  29.     pusherSetup();
  30.  
  31.     //peers[peerId.value] = startPeer(peerId.value);
  32. };
  33.  
  34. // peers[mainUserId] = startPeer(mainUserId);
  35.  
  36. function getRandomInt(max) {
  37.     return Math.floor(Math.random() * Math.floor(max));
  38. }
  39.  
  40. function pusherSetup() {
  41.     statusText.textContent = 'Установка связи';
  42.  
  43.     let pusher = new Pusher('ef46f298b0c2bd8c3f46', {
  44.         authEndpoint: 'https://59cfeadd.ngrok.io/api/pusher/auth',
  45.         cluster: 'eu',
  46.         auth: {
  47.             params: {
  48.                 test_key: mainUserId
  49.             }
  50.         }
  51.     });
  52.  
  53.     channel = pusher.subscribe('presence-my-channel');
  54.  
  55.    /* channel.bind('pusher:subscription_succeeded', (members) => {
  56.         members.each(function(member) {
  57.             console.log(member);
  58.             peers[member.id] = startPeer(member.id);
  59.         });
  60.     }); */
  61.  
  62.     channel.bind('pusher:member_added', (member) => {
  63.         statusText.textContent = member.id + ' зашёл в чатик';
  64.         console.log(member);
  65.         peers[member.id] = startPeer(member.id);
  66.     });
  67.  
  68.     channel.bind('client-signal-' + mainUserId, (signal) => {
  69.         console.log('Signal bind');
  70.  
  71.         const signalUserId = signal.userId;
  72.  
  73.         let peer = peers[signalUserId];
  74.  
  75.         if (signalUserId === mainUserId) {
  76.             return
  77.         }
  78.  
  79.         // if peer is not already exists, we got an incoming call
  80.         if (peer === undefined) {
  81.             console.log('Peer is undefined');
  82.  
  83.             peer = startPeer(signalUserId, false);
  84.         }
  85.  
  86.         peer.signal(signal.data);
  87.     });
  88. }
  89.  
  90. function getPermissions() {
  91.     return new Promise(async (res, rej) => {
  92.         try {
  93.             const stream = await navigator.mediaDevices.getUserMedia({ video: false, audio: true });
  94.             res(stream);
  95.         } catch(err) {
  96.             throw new Error(`Unable to fetch stream ${err}`);
  97.         }
  98.     });
  99. }
  100.  
  101. function startPeer(userId, initiator = true) {
  102.     if (userId === mainUserId) {
  103.         return ;
  104.     }
  105.  
  106.     const peer = new Peer({
  107.         initiator,
  108.         stream: userStream,
  109.         trickle: false,
  110.     });
  111.  
  112.     peer.on('signal', (data) => {
  113.         channel.trigger('client-signal-' + userId, {
  114.             type: 'signal',
  115.             userId: mainUserId,
  116.             data: data
  117.         });
  118.  
  119.         statusText.textContent = 'Ура';
  120.     });
  121.  
  122.     peer.on('connect', () => {
  123.        console.log('Connected!');
  124.     });
  125.  
  126.     peer.on('stream', (stream) => {
  127.         statusText.textContent = 'Сигнал получен';
  128.  
  129.         let newAudioStream = document.createElement('audio');
  130.         newAudioStream.setAttribute('autoplay', 'true');
  131.         newAudioStream.controls = true;
  132.         newAudioStream.autoplay = true;
  133.         newAudioStream.id = 'audiostream-' + userId;
  134.         document.getElementsByTagName('body')[0].appendChild(newAudioStream);
  135.  
  136.         const audioStream = document.getElementById('audiostream-' + userId);
  137.  
  138.         if (audioStream.srcObject !== stream) {
  139.             audioStream.srcObject = stream;
  140.             console.log('src Object has been set');
  141.         }
  142.     });
  143.  
  144.     peer.on('close', () => {
  145.         console.log('Close up');
  146.         let peer = peers[userId];
  147.         if(peer !== undefined) {
  148.             peer.destroy();
  149.         }
  150.  
  151.         peers[userId] = undefined;
  152.     });
  153.  
  154.     return peer;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement