WebRTC连接出错

时间:2016-04-21 18:41:55

标签: javascript android angular webrtc ionic2

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

这是类代码:

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);
     }


}

1 个答案:

答案 0 :(得分:0)

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