我目前试图控制静态功能运行时,例如单击静音,然后静音调用。目前,当添加或删除通道时,一切都在运行,但我的for lope根本不做任何事情。
我只是想控制您将在下面看到的代码何时在服务器端被调用,如果有意义的话,不需要添加或删除通道。
我使用的是express、AriJS客户端、JQuery和AsteriskAri。
有人能解释一下我是如何做到这一点的吗?
只需运行该函数,即静音阵列中的所有通道。
服务器端代码:
var ari = require('ari-client');
var util = require('util');
var chanArr = [];
var chanMute = [];
var test;
var mute;
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
//ARI client
ari.connect('http://localhost:8088', 'asterisk', 'asterisk', clientLoaded);
function clientLoaded(err, client) {
if (err) {
throw err;
}
// find or create a holding bridges
var bridge = null;
client.bridges.list(function (err, bridges) {
if (err) {
throw err;
}
bridge = bridges.filter(function (candidate) {
return candidate.bridge_type === 'mixing';
})[0];
if (bridge) {
console.log(util.format('Using bridge %s', bridge.id));
} else {
client.bridges.create({
type : 'mixing'
}, function (err, newBridge) {
if (err) {
throw err;
}
bridge = newBridge;
console.log(util.format('Created bridge %s', bridge.id));
});
}
});
// handler for StasisStart event
function stasisStart(event, channel) {
console.log(util.format(
'Channel %s just entered our application, adding it to bridge %s',
channel.name,
bridge.id));
channel.answer(function (err) {
if (err) {
throw err;
}
bridge.addChannel({
channel : channel.id
}, function (err) {
var id = chanArr.push(channel.name)
console.log("Value: " + test);
test = channel.name;
updateSip();
if (err) {
throw err;
}
//If else statement to start music for first user entering channel, music will stop once more than 1 enters the channel.
if (chanArr.length <= 1) {
bridge.startMoh(function (err) {
if (err) {
throw err;
}
});
} else if (chanArr.length === 2) {
bridge.stopMoh(function (err) {
if (err) {
throw err;
}
});
} else {}
});
});
for (i = 0; i < chanMute.length; i++) {
text += chanMute[i];
console.log("Ran.");
channel.mute({
channelId : chanMute
},
function (err) {
console.log("didnt run");
});
}
/*channel.hangup({
channelId : channel.name
},
function (err) {});*/
}
// handler for StasisEnd event
function stasisEnd(event, channel) {
console.log(util.format(
'Channel %s just left our application', channel.name));
console.log(channel.name);
var index = chanArr.indexOf(channel.name);
chanArr.splice(index, 1);
updateSip();
}
client.on('StasisStart', stasisStart);
client.on('StasisEnd', stasisEnd);
client.start('bridge-hold');
}
//Socket.io logic here
server.listen(3009, function () {
console.log('listening on *:3009');
});
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
res.sendfile(__dirname + "/testPage.html");
});
io.sockets.on('connection', function (socket) {
updateSip();
socket.on('muting', function (data) {
mute = data;
chanMute.push(data);
console.log("client side:" + chanMute);
});
});
function updateSip() {
console.log("Value: " + test);
io.sockets.emit('sip', chanArr);
}
不会运行/什么都不会发生的代码段:
for (i = 0; i < chanMute.length; i++) {
text += chanMute[i];
console.log("Ran.");
channel.mute({
channelId : chanMute
},
function (err) {
console.log("didnt run");
});
}
我的客户端JQuery:
jQuery(function ($) {
var socket = io.connect();
console.log("scope" + socket);
var mute = false;
var $sip = $('#sip');
var customerId;
socket.on('sip', function (data) {
var sip = '';
$(".exe").remove();
for (i = 0; i < data.length; i++) {
sip += data[i];
if (sip) {
$sip.append('<tr class="exe">\
<td id="siptd">' + sip + '</td>\
<td><button class="btn btn-default mute" id="mute" type="submit">Mute</button></td>\
<td><button class="btn btn-default kick" id="kicks" data-toggle="modal" data-target="#myModal" type="submit">Kick</button></td>\
</tr>');
} else {
$sip.append('Currently no extensions');
}
sip = '';
}
});
$('.kick').click(function () {
$('#myInput').focus()
});
$(document).on('click', '#mute', function () {
mute = $(this).closest('td').siblings(':first-child').text();
socket.emit('muting', mute);
console.log(mute)
});
});
事实证明,我可以像任何正常函数一样简单地控制它。
例如
客户端
$(document).on('click', '.kick', function () {
var hangup = $(this).closest('td').siblings(':first-child').text();
socket.emit('hangup', hangup);
});
服务器端
io.sockets.on('connection', function (socket) {
updateSip();
socket.on('hangup', function (data) {
hangup(data);
});
});
停滞功能
function hangup(hangval) {
console.log("Kicked:" + hangval);
client.channels.hangup
({
channelId : hangval
},
function (err) {
if (err) {
throw err;
}
});
}
希望这有帮助。
在我的应用程序中,我以以下方式加载缓存。 加载用户缓存loadUserCache() 加载帐户缓存loadAccountCache() 加载客户缓存loadCustomerCache() 上述每个调用都涉及一个数据库调用。像怀斯一样,有6-7个电话。 当我的应用程序加载时,我必须等待缓存加载。 那些都是一个接一个的顺序调用。 如果我能找到一种方法并行地进行这些调用,那么应用程序加载期间的等待时间将
我正在编写一个Django应用程序,它需要执行长异步任务。最初的想法是从执行该任务的视图启动子流程,并在另一个视图中监视进度。 当应用程序通过启动时,这个想法可以很好地工作,但在uwsgi下运行时就不行了。子进程已启动,但在视图返回后,uwsgi等待子进程结束,这打破了整个想法。 我可以在uwsgi日志中看到请求详细信息(生成的字节数等),但是套接字没有关闭,所以浏览器也在等待。 我已经看到了运行
问题内容: 在测试和开发环境中,我们遇到了一个问题,该函数有时会从.Net应用程序调用时运行得非常慢。当我们直接从Management Studio调用此功能时,它可以正常工作。 剖析它们时的区别是:从应用程序: CPU:906 读取:61853 写入:0 持续时间:926 从SSMS发送: CPU:15次 读取:11243次 写入:0 持续时间:31 现在我们已经确定,当我们重新编译该函数时,性
我正在开发一个用python运行的应用程序(始终是热泵系统的控制器),我使用flask提供一个用户界面来控制应用程序。 烧瓶应用程序有不同的控制项,例如打开或关闭系统的按钮。 我试图从python模块执行一个特定的功能,以响应按钮上的“单击”(最终目标是更改mmap资源中的一个值,该值将在另一个模块中读取以更改系统的状态)。 在flask应用程序中,我有如下内容: 但是,这会产生“内部服务器错误”
我在Azure中构建了一个简单的函数,该函数从json主体中获取文件的位置,并读取第一行以从该文件中获取头部。我正在Visual Studio中构建函数,并使用打包部署发布它。 我可以在Azure Functions下测试门户上的函数,并有一个返回结果,但当我尝试和逻辑应用程序的函数时,我得到了404未找到的错误。 我已经创建了MS给出的示例HTTPRequest函数,该函数在相同的函数名下运行良
问题内容: 我正在通过有关如何创建lambda函数的基本AWS: http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser- create-test-function-create- function.html 在此示例中,我们正在创建图像调整大小服务,触发该服务的一种方法是侦听一些要推送到S3存储桶的图