3 var _ = require('lodash');
4 var config = require('./environment');
5 var async = require('async');
7 var User = require('../models').User;
8 var Event = require('../models').Event;
9 var FaxQueue = require('../models').FaxQueue;
11 function invite(data, i, j, io, done) {
18 if (i === data.applications.length) {
22 FaxRoomId: data.roomId,
23 FaxAccountId: data.accountId
26 traceEvent(body, function() {});
28 done(new Error('DialPlan ended..'));
32 if (data.applications[i].FaxQueue) {
34 timeout = (((data.applications[i].timeout - elapsed) > data.applications[i].FaxQueue.timeout) ?
35 data.applications[i].FaxQueue.timeout : (data.applications[i].timeout - elapsed));
37 switch (data.applications[i].FaxQueue.strategy) {
43 UserId: data.applications[i].users[j].id,
44 FaxRoomId: data.roomId,
45 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
46 FaxAccountId: data.accountId,
47 FaxApplicationId: data.applications[i].id
49 users.push(data.applications[i].users[j].id);
52 data.applications[i].users.forEach(function(user) {
58 FaxRoomId: data.roomId,
59 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
60 FaxAccountId: data.accountId,
61 FaxApplicationId: data.applications[i].id
68 console.log('Strategy unknown..');
71 traceEvent(body, function() {
72 emitEvent(users, 'FAX:QUEUE:' + data.applications[i].FaxQueue.id, {
76 clearInterval(qInterval);
77 clearTimeout(aTimeout);
83 FaxRoomId: data.roomId,
84 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
85 FaxAccountId: data.accountId,
86 FaxApplicationId: data.applications[i].id
88 traceEvent(body, function() {
95 // SET AGENT APPLICATION TIMEOUT
96 timeout = data.applications[i].timeout;
98 users.push(data.applications[i].users[j].id);
103 UserId: data.applications[i].users[j].id,
104 FaxRoomId: data.roomId,
105 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
106 FaxAccountId: data.accountId,
107 FaxApplicationId: data.applications[i].id
109 traceEvent(body, function() {
110 emitEvent(users, 'FAX:AGENT:' + data.applications[i].users[j].id, {
111 timeout: data.applications[i].timeout,
113 }, function(userId) {
114 clearInterval(qInterval);
115 clearTimeout(aTimeout);
121 FaxRoomId: data.roomId,
122 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
123 FaxAccountId: data.accountId,
124 FaxApplicationId: data.applications[i].id
126 traceEvent(body, function() {
134 var qInterval = setInterval(function() {
139 if (j === data.applications[i].users.length) {
143 if (data.applications[i].FaxQueue) {
145 elapsed += data.applications[i].FaxQueue.timeout;
147 timeout = (((data.applications[i].timeout - elapsed) > data.applications[i].FaxQueue.timeout) ?
148 data.applications[i].FaxQueue.timeout : (data.applications[i].timeout - elapsed));
153 switch (data.applications[i].FaxQueue.strategy) {
159 UserId: data.applications[i].users[j].id,
160 FaxRoomId: data.roomId,
161 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
162 FaxAccountId: data.accountId,
163 FaxApplicationId: data.applications[i].id
166 users.push(data.applications[i].users[j].id);
169 data.applications[i].users.forEach(function(user) {
175 FaxRoomId: data.roomId,
176 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
177 FaxAccountId: data.accountId,
178 FaxApplicationId: data.applications[i].id
185 console.log('Strategy unknown..');
188 traceEvent(body, function() {
189 emitEvent(users, 'FAX:QUEUE:' + data.applications[i].FaxQueue.id, {
192 }, function(userId) {
193 console.log('userId', userId);
194 clearInterval(qInterval);
195 clearTimeout(aTimeout);
201 FaxRoomId: data.roomId,
202 FaxQueueId: data.applications[i].FaxQueue ? data.applications[i].FaxQueue.id : null,
203 FaxAccountId: data.accountId,
204 FaxApplicationId: data.applications[i].id
206 traceEvent(body, function() {
213 }, data.applications[i].FaxQueue ? data.applications[i].FaxQueue.timeout * 1000 : data.applications[i].timeout * 1000);
215 var aTimeout = setTimeout(function() {
216 clearInterval(qInterval);
217 invite(data, ++i, 0, io, done);
218 }, data.applications[i].timeout * 1000);
221 function processing(job, done, io) {
226 callback(null, job.data, done, io);
228 // BUILDING APPLICATION STRUCTURE
229 function(data, done, io, callback) {
230 for (var i = 0; i < data.applications.length; i++) {
231 switch (data.applications[i].app) {
233 if (!data.applications[i].users) {
234 data.applications[i].users = [];
237 data.applications[i].users.push(data.applications[i].User);
241 for (var j = 0; j < data.applications[i].FaxQueue.Users.length; j++) {
243 if (!data.applications[i].users) {
244 data.applications[i].users = [];
247 data.applications[i].users.push(
248 data.applications[i].FaxQueue.Users[j]
258 callback(null, data, done, io);
262 async.waterfall(applications,
264 function(err, data, done, io) {
265 invite(data, 0, 0, io, done);
269 function traceEvent(body, cb) {
277 .catch(function(err) {
282 function emitEvent(users, event, params, cb) {
283 users.forEach(function(user) {
284 console.log(event, user);
286 sockets[user].emit(event, params, cb);
291 module.exports = function(io, kue) {
293 var kueFax = kue.createQueue();
296 * Queue processing statement
298 kueFax.process('fax', 20, function(job, done) {
299 processing(job, done, io);
302 require('../api/fax_room/fax_room.kue').register(kueFax);
304 io.on('connection', function(socket) {
306 if (socket.handshake.query.userId) {
307 sockets[socket.handshake.query.userId] = socket;
310 socket.on('disconnect', function() {
311 if (sockets[socket.handshake.query.userId]) {
312 delete sockets[socket.handshake.query.userId];