2015-06-06 11 views
8

Sto implementando una sala per videoconferenze in cui un utente può creare una videoconferenza e invitare altri utenti.Come faccio ad aspettare che l'utente entri prima che l'organizzatore si unisca per primo

Ora voglio assicurarmi che l'utente non possa unirsi alla conferenza finché l'organizzatore della riunione non apre la stanza.

Ho il seguente codice ma non funziona. L'organizzatore della riunione può aprire la sala, ma quando gli utenti fanno clic su "Partecipa alla conferenza" non partecipa.

// https://github.com/muaz-khan/RTCMultiConnection 

var rmc = new RTCMultiConnection(); 

rmc.userid = "<?php echo $user->fname . ' ' . $user->lname . ' (' . $user->username . ')' ; ?>"; 
rmc.session = { 
    video: true, 
    audio: true, 
    data: true 
}; 

var room_status = 0; //room closed 
$('#open-room').click(function() { 
    // http://www.rtcmulticonnection.org/docs/open/ 
    room_status = 1; //room opened 
    rmc.open(); 
    rmc.streams.mute({video : true}); 
    document.getElementById("on-off-video").style.color= 'red'; 
}); 

$('#join-room').click(function() { 
    if(room_status == 1) { 
     // http://www.rtcmulticonnection.org/docs/connect/ 
     rmc.connect(); 
     rmc.streams.mute({video: true}); 
     document.getElementById("on-off-video").style.color= 'red'; 
    } 
    console.log("Waiting for meeting organizer"); 
}); 

// display a notification box 
window.addEventListener('beforeunload', function() { 
    return 'Do you want to leave?'; 
}, false); 

// leave here 
window.addEventListener('unload', function() { 
    rmc.leave(); 
}, false); 

rmc.onMediaCaptured = function() { 
    $('#share-screen').removeAttr('disabled'); 
    $('#open-room').attr('disabled', 'disabled'); 
    $('#join-room').attr('disabled', 'disabled'); 
}; 

//chat 
rmc.onopen = function (event) { 
    //alert('Text chat has been opened between you and ' + event.userid); 
    document.getElementById('input-text-chat').disabled = false; 
    room_status = 1; 
}; 

//end of chat 
$('#disconnect').click(function() { 
    room_status = 0; //room closed 
    rmc.leave(); 
    setTimeout("location.href = '../';",2000); 
}); 

//to know the stream type 
rmc.onstream = function (e) { 
    if (e.type == 'local') { 
     // alert("the stream is local"); 
    } 
    if (e.type == 'remote') { 
     // alert("the stream is remote"); 
    } 
    if (e.isVideo) { 
     var uibox = document.createElement("div"); 
     uibox.appendChild(document.createTextNode(e.userid)); 
     uibox.className = "userid"; 
     uibox.id = "uibox-" + e.userid.replace(/ |\(|\)/g, ''); 
     document.getElementById('video-container').appendChild(e.mediaElement); 
     document.getElementById('video-container').appendChild(uibox); 
    } 
    else if (e.isAudio) { 
     document.getElementById('video-container').appendChild(e.mediaElement); 
    } 
    else if (e.isScreen) { 
     $('#cotools-panel iframe').hide(); 
     $('#cotools-panel video').remove(); 
     document.getElementById('cotools-panel').appendChild(e.mediaElement); 
    } 

}; 

//removes the div containing the userid of the user who is leaving 
rmc.onleave = function (e) { 
    $('#' + "uibox-" + e.userid.replace(/ |\(|\)/g, '')).remove(); 
}; 
+0

Non sembra che room_status sia in ambito $ ('# join-room'). Considera la possibilità di renderlo globale o di trasmettere un messaggio ad esso. –

+0

Aspetta, è stato stupido. Non stai dichiarando con var quindi è globale. Dovrò dargli più pensiero. –

+1

Stai ricevendo sempre questo in console no? ("In attesa dell'organizzatore della riunione"); È necessario informare tutti i browser che il valore di room_status è uguale a 1 una volta aperta la stanza. (Emettere un messaggio a tutti i browser altrimenti il ​​valore per ogni browser sarà sempre 0). – ecarrizo

risposta

2

Sembra che tu abbia 3 problemi qui.

1) In primo luogo, penso che non è possibile utilizzare un solo oggetto RTCMultiConnection per aprire e unire una stanza. Devi creare 2 oggetti separati. Ma il tuo codice non dovrebbe funzionare nella stessa finestra per aprire e unirsi alla stanza. Quindi non è un problema se lo si esegue una volta in una finestra per aprire la stanza e uno in un'altra finestra per unirlo.

In questo caso si ha un problema più importante. La variabile room_status è impostata su 1 quando si apre la stanza in una finestra. Ma nell'altra finestra, room_status è ancora uguale a 0, quindi non si chiama il codice all'interno di if() in $ ('# join-room'). Fare clic su function.

Non è un grosso problema, per ora, cancelliamo l'istruzione if per assicurarci che il codice sia eseguito (e legga il mio punto 3 per il tuo obiettivo originale).

2) guardo al semplice esempio dato sulla https://github.com/muaz-khan/RTCMultiConnection: https://jsfiddle.net/c46de0L8/ e sembra si dovrebbe usare unire e non connettersi. E soprattutto, dovresti utilizzare un ID canale e un ID camera per poter connettere 2 utenti.

Così ho modificare il codice un po 'e sembra funzionare bene:

var CHANNEL_ID = "MYCHANNEL-" + window.RMCDefaultChannel; 
var ROOM_ID = "MYROOM"; 
var SESSION = { 
    video: true, 
    audio: true, 
    data: true 
}; 
var USERID = "<?php echo $user->fname . ' ' . $user->lname . ' (' . $user->username . ')' ; ?>"; 

var rmc = undefined; 

var room_status = 0; //room closed 
$('#open-room').click(function() { 
    // http://www.rtcmulticonnection.org/docs/open/ 
    room_status = 1; //room opened 
    rmc = new RTCMultiConnection(CHANNEL_ID); 
    rmc.userid = USERID; 
    rmc.session = SESSION; 
    rmc.open({ 
     dontTransmit: true, 
     sessionid: ROOM_ID 
    }); 
    rmc.streams.mute({video : true}); 
    document.getElementById("on-off-video").style.color= 'red'; 
}); 

$('#join-room').click(function() { 
    //if(room_status == 1) { 
     // http://www.rtcmulticonnection.org/docs/connect/ 
     rmc = new RTCMultiConnection(CHANNEL_ID); 
     rmc.join({ 
      sessionid: ROOM_ID, 
      userid: USERID, 
      session: SESSION 
     }); 
     rmc.streams.mute({video: true}); 
     document.getElementById("on-off-video").style.color= 'red'; 
    //} 
    console.log("Waiting for meeting organizer"); 
}); 

Il resto del codice rimane invariato.

ho messo un codice di lavoro di massima in un JSFiddle: https://jsfiddle.net/sebdoncker/fjtkvnjq/2/

3) Ora avete ancora il problema: come essere sicuri che la stanza si apre prima di essere in grado di farne parte. Penso che tu possa usare l'ID ROOM per questo. Quando un utente apre una nuova stanza dovresti generare un ID ROOM. Ora devi inviare questo ID ROOM all'utente del tuo joiner (tramite comunicazione con il server o in un altro modo a seconda dell'architettura dell'applicazione). E poiché l'utente del joiner non ha l'ID ROOM, è possibile disabilitare il pulsante join.

È solo un vantaggio, questo dipende dall'architettura generale dell'applicazione.