Created
July 14, 2016 11:40
-
-
Save aylarov/c4ed0fcfb4c32904cf3b25d6bcca45a3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// User Conference | |
require(Modules.Conference); | |
require(Modules.Player); | |
var conf, | |
user_call, | |
channel_calls = [], | |
caller_id, | |
display_name, | |
default_channel_ids; | |
VoxEngine.addEventListener(AppEvents.Started, function (e) { | |
conf = VoxEngine.createConference(); | |
}); | |
VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) { | |
user_call = e.call; | |
caller_id = e.callerid; | |
display_name = e.displayName; | |
default_channel_ids = e.headers['X-default-channel-ids']; | |
e.call.addEventListener(CallEvents.Connected, handleCallConnected); | |
e.call.addEventListener(CallEvents.Disconnected, handleCallDisconnected); | |
e.call.addEventListener(CallEvents.MessageReceived, handleMessageReceived); | |
e.call.answer(); | |
}); | |
function handleMessageReceived(e) { | |
var result = JSON.parse(e.text); | |
switch (result.event) { | |
case "join_channel": | |
var call = VoxEngine.callConference("channel_" + result.name, caller_id, display_name); | |
call.addEventListener(CallEvents.Connected, handleChannelConnected); | |
call.addEventListener(CallEvents.Disconnected, handleChannelDisconnected); | |
call.addEventListener(CallEvents.MicStatusChange, handleChannelAudio); | |
call.handleMicStatus(true); | |
channel_calls.push(call); | |
break; | |
case "leave_channel": | |
for (var i = 0; i < channel_calls.length; i++) { | |
if (channel_calls[i].number().replace("channel_", "") == result.name) { | |
channel_calls[i].hangup(); | |
} | |
} | |
break; | |
case "choose_channel": | |
for (i = 0; i < channel_calls.length; i++) { | |
if (channel_calls[i].number().replace("channel_", "") == result.name) { | |
user_call.sendMediaTo(channel_calls[i]); | |
} | |
if (channel_calls[i].number().replace("channel_", "") == result.prev) { | |
user_call.stopMediaTo(channel_calls[i]); | |
} | |
} | |
break; | |
} | |
} | |
function handleCallConnected(e) { | |
// Connect the user to his conference | |
var player = VoxEngine.createTTSPlayer("Conference connected"); | |
player.sendMediaTo(conf); | |
VoxEngine.sendMediaBetween(e.call, conf); | |
// Make outbound calls to channels user is subscribed to | |
channel_ids = default_channel_ids.split(','); | |
for (var i = 0; i < channel_ids.length; i++) { | |
if (channel_ids[i].length === 0) { | |
continue; | |
} | |
var call = VoxEngine.callConference("channel_" + channel_ids[i], caller_id, display_name); | |
call.addEventListener(CallEvents.Connected, handleChannelConnected); | |
call.addEventListener(CallEvents.Disconnected, handleChannelDisconnected); | |
call.addEventListener(CallEvents.MicStatusChange, handleChannelAudio); | |
call.handleMicStatus(true); | |
channel_calls.push(call); | |
} | |
} | |
function handleCallDisconnected(e) { | |
// Stop conference if user disconnected | |
VoxEngine.terminate(); | |
} | |
function handleChannelAudio(e) { | |
// Send info about channel audio | |
user_call.sendMessage(JSON.stringify({ | |
event: "channel_activity", | |
name: e.call.number().replace("channel_", ""), | |
active: e.active | |
})); | |
} | |
function handleChannelConnected(e) { | |
// Channel with name ALL was connected successfully | |
user_call.sendMessage(JSON.stringify({ | |
event: "channel_connected", | |
name: e.call.number().replace("channel_", "") | |
})); | |
// Sending media from the channel to user | |
e.call.sendMediaTo(conf); | |
//VoxEngine.sendMediaBetween(conf, e.call); | |
} | |
function handleChannelDisconnected(e) { | |
user_call.sendMessage(JSON.stringify({ | |
event: "channel_disconnected", | |
name: e.call.number().replace("channel_", "") | |
})); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment