UNPKG

voxo-agi

Version:
92 lines (55 loc) 1.8 kB
"use strict"; var events= require("events"); var util = require('util'); var AGIChannel = require('./agi-channel'); var AsyncAGIServer = function(mapper, amiConnection) { events.EventEmitter.call(this); var self = this; self.amiConnection = amiConnection; self.mapper = mapper; self.channels = {}; amiConnection.on('asyncagi', self.handleEvent.bind(self)); amiConnection.on('hangup', function(evt){ console.log("hangup!!!!!"); }); }; util.inherits(AsyncAGIServer, events.EventEmitter); AsyncAGIServer.prototype.handleEvent = function(event) { var channelName = event.channel; var self = this; if (event.subevent == "Start") { var request = AGIChannel.parseBuffer(unescape(event.env)); var channel = new AGIChannel(request, self.mapper); this.channels[channelName] = channel; channel.on("request", function(req, cmdId) { self.amiConnection.action({ "action": "agi", "commandid": cmdId, "command": req, "channel": channelName }); }); channel.once("error", function (error) { console.log('Got error from script', error, error.stack); if (!channel.isHangup) { channel.hangup(); } }); channel.once("done", function () { if (channel.isHangup) return; self.amiConnection.action({ "action": "agi", "command": "ASYNCAGI BREAK", "channel": channelName }); }); } else if (event.subevent == 'Exec') { setTimeout(function (channel) { channel.handleReply(unescape(event.result)); }, 50, this.channels[channelName]); } else if (event.subevent === "End") { this.channels[channelName].isHangup = true; delete this.channels[channelName]; } }; module.exports = AsyncAGIServer;