bigbluebutton-Github/bigbluebutton-html5/app/client/globals_audio.coffee

75 lines
3.1 KiB
CoffeeScript
Executable File

# Periodically check the status of the WebRTC call, when a call has been established attempt to hangup,
# retry if a call is in progress, send the leave voice conference message to BBB
@exitVoiceCall = (event) ->
if not Meteor.config.useSIPAudio
leaveWebRTCVoiceConference_verto();
cur_call = null;
return
else
# To be called when the hangup is initiated
hangupCallback = ->
console.log "Exiting Voice Conference"
# Checks periodically until a call is established so we can successfully end the call
# clean state
getInSession("triedHangup", false)
# function to initiate call
(checkToHangupCall = (context) ->
# if an attempt to hang up the call is made when the current session is not yet finished, the request has no effect
# keep track in the session if we haven't tried a hangup
if BBB.getCallStatus() isnt null and !getInSession("triedHangup")
console.log "Attempting to hangup on WebRTC call"
if BBB.amIListenOnlyAudio() # notify BBB-apps we are leaving the call call if we are listen only
Meteor.call('listenOnlyRequestToggle', BBB.getMeetingId(), getInSession("userId"), getInSession("authToken"), false)
BBB.leaveVoiceConference hangupCallback
getInSession("triedHangup", true) # we have hung up, prevent retries
notification_WebRTCAudioExited()
else
console.log "RETRYING hangup on WebRTC call in #{Meteor.config.app.WebRTCHangupRetryInterval} ms"
setTimeout checkToHangupCall, Meteor.config.app.WebRTCHangupRetryInterval # try again periodically
)(@) # automatically run function
return false
# join the conference. If listen only send the request to the server
@joinVoiceCall = (event, options) ->
if !isWebRTCAvailable()
notification_WebRTCNotSupported()
return
# isListenOnly ?= trueoptions
if not Meteor.config.useSIPAudio
#
# "click #joinAudio": (event) ->
# displayVertoVideo()
if options.watchOnly?
toggleWhiteboardVideo("video")
# return
wasCallSuccessful = false
debuggerCallback = (message) ->
console.log("CALLBACK: "+JSON.stringify(message));
#
# Beginning of hacky method to make Firefox media calls succeed.
# Always fail the first time. Retry on failure.
#
if !!navigator.mozGetUserMedia and message.errorcode is 1001
callIntoConference_verto(extension, conferenceUsername, conferenceIdNumber, ((m) -> console.log("CALLBACK: "+JSON.stringify(m))), "webcam", options)
#
# End of hacky method
#
callIntoConference_verto(extension, conferenceUsername, conferenceIdNumber, debuggerCallback, "webcam", options);
return
else
# create voice call params
joinCallback = (message) ->
console.log "Beginning WebRTC Conference Call"
notification_WebRTCAudioJoining()
if options.isListenOnly
Meteor.call('listenOnlyRequestToggle', BBB.getMeetingId(), getInSession("userId"), getInSession("authToken"), true)
requestedListenOnly = options.isListenOnly?
BBB.joinVoiceConference joinCallback, requestedListenOnly # make the call #TODO should we apply role permissions to this action?
return false