2016-06-24 1 views
0

Je travaille sur une application de chat vidéo utilisant EasyRTC et Xirsys. Il fonctionne correctement (avec le serveur Google STUN), mais échoue lorsque je crée un écouteur pour l'événement getIceConfig. Le serveur EasyRTC est sur le port 8080, et j'ai aussi un serveur Apache en cours d'exécution sur le port 80. J'ai créé mon fichier server.js comme suit:Impossible de se connecter aux serveurs Xirsys STUN et TURN en utilisant EasyRTC

// Load required modules 
var http = require("http");    // http server core module 
var express = require("express");   // web framework external module 
var io  = require("socket.io");   // web socket external module 
var easyrtc = require("../");   // EasyRTC external module 

// Setup and configure Express http server. Expect a subfolder called "static" to be the web root. 
var httpApp = express(); 
httpApp.use(express.static(__dirname + "/static/")); 

// Start Express http server on port 8080 
var webServer = http.createServer(httpApp).listen(8080); 

// Start Socket.io so it attaches itself to Express server 
var socketServer = io.listen(webServer, {"log level":1}); 

easyrtc.setOption("logLevel", "debug"); 

// Overriding the default easyrtcAuth listener, only so we can directly access its callback 
easyrtc.events.on("easyrtcAuth", function(socket, easyrtcid, msg, socketCallback, callback) { 
    easyrtc.events.defaultListeners.easyrtcAuth(socket, easyrtcid, msg, socketCallback, function(err, connectionObj){ 
     if (err || !msg.msgData || !msg.msgData.credential || !connectionObj) { 
      callback(err, connectionObj); 
      return; 
     } 

     connectionObj.setField("credential", msg.msgData.credential, {"isShared":false}); 

     console.log("["+easyrtcid+"] Credential saved!", connectionObj.getFieldValueSync("credential")); 

     callback(err, connectionObj); 
    }); 
}); 

// To test, lets print the credential to the console for every room join! 
easyrtc.events.on("roomJoin", function(connectionObj, roomName, roomParameter, callback) { 
    console.log("["+connectionObj.getEasyrtcid()+"] Credential retrieved!", connectionObj.getFieldValueSync("credential")); 
    easyrtc.events.defaultListeners.roomJoin(connectionObj, roomName, roomParameter, callback); 
}); 


// Start EasyRTC server 
var rtc = easyrtc.listen(httpApp, socketServer, null, function(err, rtcRef) { 
    console.log("Initiated"); 

    rtcRef.events.on("roomCreate", function(appObj, creatorConnectionObj, roomName, roomOptions, callback) { 
     console.log("roomCreate fired! Trying to create: " + roomName); 

     appObj.events.defaultListeners.roomCreate(appObj, creatorConnectionObj, roomName, roomOptions, callback); 
    }); 
}); 

easyrtc.on("getIceConfig", function(connectionObj, callback) { 

    // This object will take in an array of XirSys STUN and TURN servers 
    var iceConfig = []; 

    request({ 
     url: 'https://service.xirsys.com/ice', 
     qs: { 
      ident: "***", 
      secret: "***", 
      domain: "***", 
      application: "default", 
      room: "default", 
      secure: 1 
     }, 
     function (error, response, body) { 
      if (!error && response.statusCode == 200) { 
       // body.d.iceServers is where the array of ICE servers lives 
       iceConfig = body.d.iceServers; 
       console.log(iceConfig); 
       callback(null, iceConfig); 
      } 
     } 
    }); 
}); 

Les messages d'erreur de débogage sont ci-dessous:

info - EasyRTC: Starting EasyRTC Server (v1.0.15) on Node (v4.4.5) 
debug - EasyRTC: Emitting event 'startup' 
debug - EasyRTC: Running func 'onStartup' 
debug - EasyRTC: Configuring Http server 
debug - EasyRTC: Setting up demos to be accessed from '/demos/' 
debug - EasyRTC: Setting up API files to be accessed from '/easyrtc/' 
debug - EasyRTC: Configuring Socket server 
debug - EasyRTC: Creating application: 'default' 
debug - EasyRTC: [default] Room [default] Running func 'onRoomCreate' 
debug - EasyRTC: Creating room: 'default' with options: {} 
info - EasyRTC: EasyRTC Server Ready For Connections (v1.0.15) 
Initiated 
debug - EasyRTC: [U0LMzF8jbIBdxq3sGtxP] Socket connected 
debug - EasyRTC: Emitting event 'connection' 
debug - EasyRTC: Running func 'onConnection' 
debug - EasyRTC: [U0LMzF8jbIBdxq3sGtxP] Running func 'onEasyrtcAuth' 
debug - EasyRTC: Attempt to request non-existent application name: 'easyrtc.audioVideoSimple' 
debug - EasyRTC: Emitting Authenticate 
debug - EasyRTC: Creating application: 'easyrtc.audioVideoSimple' 
roomCreate fired! Trying to create: default 
debug - EasyRTC: [easyrtc.audioVideoSimple] Room [default] Running func 'onRoomCreate' 
debug - EasyRTC: Creating room: 'default' with options: {} 
[U0LMzF8jbIBdxq3sGtxP] Credential retrieved! null 
debug - EasyRTC: [easyrtc.audioVideoSimple][U0LMzF8jbIBdxq3sGtxP] Running func 'onRoomJoin' 
debug - EasyRTC: [easyrtc.audioVideoSimple][U0LMzF8jbIBdxq3sGtxP] Room [default] Running func 'connectionRoomObj.emitRoomDataDelta' 
debug - EasyRTC: [easyrtc.audioVideoSimple][U0LMzF8jbIBdxq3sGtxP] Room [default] Running func 'connectionRoomObj.generateRoomDataDelta' 
debug - EasyRTC: [easyrtc.audioVideoSimple][U0LMzF8jbIBdxq3sGtxP] Running func 'onSendToken' 
C:\Users\Jamie\nodes\easyrtc\node_modules\easyrtc\server_example\server.js:58 
    request({ 
    ^

ReferenceError: request is not defined 
    at EventEmitter.<anonymous> (C:\Users\Jamie\nodes\easyrtc\node_modules\easyrtc\server_example\server.js:58:5) 
    at emitTwo (events.js:87:13) 
    at EventEmitter.emit (events.js:172:7) 
    at C:\Users\Jamie\nodes\easyrtc\node_modules\easyrtc\lib\easyrtc_default_event_listeners.js:1057:34 
    at fn (C:\Users\Jamie\nodes\easyrtc\node_modules\easyrtc\node_modules\async\lib\async.js:582:34) 
    at Immediate._onImmediate (C:\Users\Jamie\nodes\easyrtc\node_modules\easyrtc\node_modules\async\lib\async.js:498:34) 
    at processImmediate [as _immediateCallback] (timers.js:383:17) 

info - EasyRTC: Starting EasyRTC Server (v1.0.15) on Node (v4.4.5) 
debug - EasyRTC: Emitting event 'startup' 
debug - EasyRTC: Running func 'onStartup' 
debug - EasyRTC: Configuring Http server 
debug - EasyRTC: Setting up demos to be accessed from '/demos/' 
debug - EasyRTC: Setting up API files to be accessed from '/easyrtc/' 
debug - EasyRTC: Configuring Socket server 
debug - EasyRTC: Creating application: 'default' 
debug - EasyRTC: [default] Room [default] Running func 'onRoomCreate' 
debug - EasyRTC: Creating room: 'default' with options: {} 
info - EasyRTC: EasyRTC Server Ready For Connections (v1.0.15) 
Initiated 
debug - EasyRTC: [YBCNOMSW7zbRXF0IH_g2] Socket connected 
debug - EasyRTC: Emitting event 'connection' 
debug - EasyRTC: Running func 'onConnection' 
debug - EasyRTC: [YBCNOMSW7zbRXF0IH_g2] Running func 'onEasyrtcAuth' 
debug - EasyRTC: Attempt to request non-existent application name: 'easyrtc.audioVideoSimple' 
debug - EasyRTC: Emitting Authenticate 
debug - EasyRTC: Creating application: 'easyrtc.audioVideoSimple' 
roomCreate fired! Trying to create: default 
debug - EasyRTC: [easyrtc.audioVideoSimple] Room [default] Running func 'onRoomCreate' 
debug - EasyRTC: Creating room: 'default' with options: {} 
[YBCNOMSW7zbRXF0IH_g2] Credential retrieved! null 
debug - EasyRTC: [easyrtc.audioVideoSimple][YBCNOMSW7zbRXF0IH_g2] Running func 'onRoomJoin' 
debug - EasyRTC: [easyrtc.audioVideoSimple][YBCNOMSW7zbRXF0IH_g2] Room [default] Running func 'connectionRoomObj.emitRoomDataDelta' 
debug - EasyRTC: [easyrtc.audioVideoSimple][YBCNOMSW7zbRXF0IH_g2] Room [default] Running func 'connectionRoomObj.generateRoomDataDelta' 
debug - EasyRTC: [easyrtc.audioVideoSimple][YBCNOMSW7zbRXF0IH_g2] Running func 'onSendToken' 
[...path]\node_modules\easyrtc\server_example\server.js:58 
    request({ 
    ^

ReferenceError: request is not defined 
    at EventEmitter.<anonymous> ([...path]\node_modules\easyrtc\server_example\server.js:58:5) 
    at emitTwo (events.js:87:13) 
    at EventEmitter.emit (events.js:172:7) 
    at [...path]\node_modules\easyrtc\lib\easyrtc_default_event_listeners.js:1057:34 
    at fn (C[...path]\node_modules\easyrtc\node_modules\async\lib\async.js:582:34) 
    at Immediate._onImmediate ([...path]\node_modules\easyrtc\node_modules\async\lib\async.js:498:34) 
    at processImmediate [as _immediateCallback] (timers.js:383:17) 

Des idées sur ce qui cause cela? Cela arrive à la fois dans Chrome et Firefox. Merci.

Répondre

1

Voici votre erreur:

ReferenceError: request is not defined 

Vous avez oublié d'invoquer request avec l'objet http.

Voici votre solution:

Modifier ceci:

request({ 
     url: 'https://service.xirsys.com/ice', 
     ... 

Pour être ceci:

http.request({ 
     url: 'https://service.xirsys.com/ice', 
     ... 
+0

Cela semble résoudre le problème. – user5527561

+0

Cool. Alors donnez-moi une case verte (c'est-à-dire acceptez la réponse). – selbie