2016-04-21 181 views
0

我正在为Android编写基于Ionic2和WebRTC的应用程序。
特别是我使用这个库https://github.com/feross/simple-peer
我使用推送通知在两个应用程序之间交换信号数据。
当用户想要联系另一个时,称为connectToPeer()方法,随后另一个接收请求并返回响应。
一切工作正常,除了你必须建立真正的连接点,I have this error

这是类代码:WebRTC连接错误

var self; 
var peer; 

import {Injectable} from 'angular2/core'; 
import {Storage, LocalStorage, Events} from 'ionic-angular'; 

@Injectable() 
export class VallasciappData { 
    static get parameters() { 
     return [[Events]]; 
    } 
    constructor(events) { 
     //conacts data 
     if(window.localStorage.getItem("contacts") == null || window.localStorage.getItem("contacts") == 'false'){ 
      this.contacts = [ 
         { 
          username: 'This is a contact', 
          id:'1' 
         }, 
         { 
          username: 'Another contact', 
          id:'2' 
         } 
        ]; 
     }else{ 
      this.contacts = JSON.parse(window.localStorage.getItem("contacts")); 
     } 
     //messages data 
     if(window.localStorage.getItem("messages") == null || window.localStorage.getItem("messages") == 'false'){ 
      this.data = [{ 
       username: 'Myapp', 
       id: '1', 
       lastMessage: "Welcome to Myapp", 
       messages: [{ 
        emitter: '1', 
        type: 'text', 
        text: 'Welcome to Myapp', 
        url: '0', 
        date: '0/0/0', 
        time: '0:0' 
          }] 
         }]; 
     }else{ 
      this.data = JSON.parse(window.localStorage.getItem("messages")); 
     } 
     window.localStorage.setItem("messages", JSON.stringify(this.data)); 
     self=this; 
     this.peers = new Array(); 
     this.saveData(); 
     this.events = events; 
     this.showProgressBar = true; 



     var push = PushNotification.init({ 
      android: { 
       senderID: "XXXXXXXXXX" 
      } 
     }); 

     push.on('registration', (data) => { 
      // data.registrationId 
      alert(data.registrationId); 
      this.sendMyRID(data.registrationId); 

     }); 

     push.on('notification', (data) => { 
      // data.message, 
      // data.title, 
      // data.count, 
      // data.sound, 
      // data.image, 
      // data.additionalData 
      alert(data.title+data.message); 
      console.log(data); //this.peers[sessionID] 
      //var additionalData = data.additionalData 
      if(data.additionalData.additionalData.type == "offer"){ 
       console.log("offer ok"); 
       peer = new SimplePeer({initiator: false, trickle: false }); 
       peer.on('error', (err) => { console.log('error', err) }); 
       peer.on('signal', (datap) => { 
        console.log('SIGNAL', JSON.stringify(datap)) 
        var xhttp = new XMLHttpRequest(); 
        xhttp.onreadystatechange = function() { 
         if (xhttp.readyState == 4 && xhttp.status == 200) { 
          console.log(xhttp.responseText); 
          var xmlResponse = xhttp.responseXML; 
          var reply = xmlResponse.getElementsByTagName("response")[0].childNodes[0].nodeValue; 
          console.log(reply); 
          if (reply == "send ok") {} else {} 
         } 
        }; 

        var additionalData = { 
         'Sid': window.localStorage.getItem("id"), 
         'Rid': data.additionalData.additionalData.Sid, 
         'type': "answer", 
         'response': JSON.stringify(datap) 
         }; 
        console.log("ok1"); 
        xhttp.open("POST", "http://XXXXXXXXXXXXXXXXXXXX", true); 
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
        xhttp.send("username=" + window.localStorage.getItem("username") + 
           "&password=" + window.localStorage.getItem("password") + 
           "&id=" + window.localStorage.getItem("id")+ 
           "&Rid=" + data.additionalData.additionalData.Sid+ 
           "&additionalData=" + JSON.stringify(additionalData)); 
        console.log("ok2"); 
       }); 
       peer.signal(JSON.parse(data.additionalData.additionalData.response)); 
       peer.on('connect',() => { 
        console.log('CONNECT'); 
        peer.send('whatever' + Math.random()); 
       }); 
       peer.on('data', (data) => { 
        console.log('data: ' + data) 
       }); 
      } 
      if(data.additionalData.additionalData.type == "answer"){ 
       console.log("answer ok"); 
       peer.signal(JSON.parse(data.additionalData.additionalData.response)); 
       console.log("peer signal ok"); 
       peer.send('prova messaggio'); 
       console.log("prova messaggio"); 
      } 
     }); 

     push.on('error', (e) => { 
      // e.message 
     }); 

    } 

    connectToPeer(sessionID){ 
     if(this.peers[sessionID] == null){ 
      console.log("okk"); 
      peer = new SimplePeer({ initiator: true, trickle: false }); 

      peer.on('error', (err) => { console.log('error', err) }); 

      peer.on('signal', (data) => { 
       console.log('SIGNAL', JSON.stringify(data)); 
       var xhttp = new XMLHttpRequest(); 
       xhttp.onreadystatechange = function() { 
        if (xhttp.readyState == 4 && xhttp.status == 200) { 
         console.log(xhttp.responseText); 
         var xmlResponse = xhttp.responseXML; 
         var reply = xmlResponse.getElementsByTagName("response")[0].childNodes[0].nodeValue; 
         console.log(reply); 
         if (reply == "send ok") {} else {} 
        } 
       }; 

       var additionalData = { 
        'Sid': window.localStorage.getItem("id"), 
        'Rid': sessionID, 
        'type': "offer", 
        'response': JSON.stringify(data) 
        }; 
       console.log("ok1"); 
       xhttp.open("POST", "http://XXXXXXXXXXXXXXXXXXXXXXXX", true); 
       xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
       xhttp.send("username=" + window.localStorage.getItem("username") + 
          "&password=" + window.localStorage.getItem("password") + 
          "&id=" + window.localStorage.getItem("id")+ 
          "&Rid=" + sessionID+ 
          "&additionalData=" + JSON.stringify(additionalData)); 
       console.log("ok2"); 

      }); 



      peer.on('connect',() => { 
       console.log('CONNECT'); 
       peer.send('whatever' + Math.random()); 
      }); 

      peer.on('data', (data) => { 
       console.log('data: ' + data); 
      }); 
     }else{ 
      console.log("noting"); 
     } 
    } 

    sendMyRID(id) { 
       var xhttp = new XMLHttpRequest(); 
       xhttp.onreadystatechange = function() { 
        if (xhttp.readyState == 4 && xhttp.status == 200) { 
         console.log(xhttp.responseText); 
         var xmlResponse = xhttp.responseXML; 
         var reply = xmlResponse.getElementsByTagName("response")[0].childNodes[0].nodeValue; 
         console.log(reply); 
         if (reply == "update ok") {} else {} 
        } 
       }; 
       xhttp.open("POST", "http://XXXXXXXXXXXXXXXXX", true); 
       xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
       xhttp.send("regid=" + id); 
    } 



    saveData() { 
     //if(this.data != self.data) 
     this.data = self.data; 
     //this.showProgressBar = self.showProgressBar; 
     console.log("ciao"); 
     //var sd = JSON.parse(window.localStorage.getItem("messages")); 
     /*if (self.data != sd) { 
      self.data = JSON.parse(window.localStorage.getItem("messages")); 
     }*/ 
     setTimeout(() => { 
      this.saveData(); 
     }, 500); 
    } 


} 
+0

这是一个数据通道错误。你想使用数据通道吗? – jib

+0

我使用库提供的示例https://github.com/feross/simple-peer – Vallasc

回答

0

我做了一些测试,我发现,如果我做了两次连接建立连接,但我不知道为什么。