-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.js
More file actions
168 lines (147 loc) · 6.99 KB
/
server.js
File metadata and controls
168 lines (147 loc) · 6.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/**
* Created by serg on 26.05.2016.
*/
var server = require('http').createServer().listen(3333, "193.93.217.154", function(){
console.log("SERVER IS UP");
}),
io = require('socket.io').listen(server);
io.on('connection', function(socket){
var calling_queue = [];
socket.emit('connected',{current_socket_id:socket.id});
var agentnumber = socket.handshake.query.agentnumber;
var telnethost = socket.handshake.query.telnethost;
var telnetport = socket.handshake.query.telnetport;
var telnetuser = socket.handshake.query.telnetuser;
var telnetsecret = socket.handshake.query.telnetsecret;
var dbhost = socket.handshake.query.dbhost;
var dbuser = socket.handshake.query.dbuser;
var dbsecret = socket.handshake.query.dbsecret;
var dbname = socket.handshake.query.dbname;
var dbport = parseInt(socket.handshake.query.dbport);
if(!agentnumber || !telnethost || !telnetport || !telnetuser || !telnetsecret || !dbhost || !dbuser || !dbsecret || !dbname || !dbport){
socket.emit('no_options');
}
var mysql = require('mysql'),
connection = mysql.createConnection({
host : dbhost,
user : dbuser,
password : dbsecret,
database : dbname,
port : dbport
});
connection.connect(function(err) {
if (err) {
socket.emit('error_connect',{msg:'Incorrect DB options'});
return;
}
});
var namiConfig = {
host: telnethost,
port: telnetport,
username: telnetuser,
secret: telnetsecret
};
var nami = new (require("nami").Nami)(namiConfig);
/*nami.on('namiEventAgentRingNoAnswer', function (event) {
socket.emit('message',event);
var ar_index = calling_queue.indexOf(event.uniqueid);
if(ar_index != -1){
calling_queue = calling_queue.splice(ar_index,1);
}
});*/
nami.on('namiEventAgentConnect', function (event) {
var ar_index = calling_queue.indexOf(event.uniqueid);
if(ar_index != -1){
calling_queue = calling_queue.splice(ar_index,1);
}
});
nami.on('namiEventAgentDump', function (event) {
var ar_index = calling_queue.indexOf(event.uniqueid);
if(ar_index != -1){
calling_queue = calling_queue.splice(ar_index,1);
}
socket.emit('remove_message',{uniqueid:event.uniqueid});
});
nami.on('namiEventAgentRingNoAnswer', function (event) {
var ar_index = calling_queue.indexOf(event.uniqueid);
if(ar_index != -1){
calling_queue = calling_queue.splice(ar_index,1);
}
socket.emit('remove_message',{uniqueid:event.uniqueid});
});
nami.on('namiEventAgentComplete', function (event) {
var ar_index = calling_queue.indexOf(event.uniqueid);
if(ar_index != -1){
calling_queue = calling_queue.splice(ar_index,1);
}
socket.emit('remove_message',{uniqueid:event.uniqueid});
});
nami.on('namiEventQueueCallerAbandon', function (event) {
var ar_index = calling_queue.indexOf(event.uniqueid);
if(ar_index != -1){
calling_queue = calling_queue.splice(ar_index,1);
}
socket.emit('remove_message',{uniqueid:event.uniqueid});
});
nami.on('namiEventAgentCalled', function (event) {
if (event.agentname == agentnumber){
if(calling_queue.indexOf(event.uniqueid) == -1){
calling_queue.push(event.uniqueid);
var phone = event.calleridnum;
phone = phone.slice( -9 );
connection.query('SELECT uid'+
' FROM users_pi'+
' WHERE (phone like "%'+phone+'%")'+
' or (_phone_home like "%'+phone+'%")'+
' or (_phone_second like "%'+phone+'%")'+
' ORDER BY uid DESC LIMIT 1',
function(err, results){
if (results){
if(results.length > 0){
connection.query('SELECT users.id as user_id, users_pi.fio as user_fio, bills.deposit as user_deposit, users.credit as user_credit, tarif_plans.name as user_plan_name, groups.name as user_group_name, districts.name as user_district_name, streets.name as user_street_name, builds.number as user_bild_number, users_pi.address_flat as user_flat_number'+
' FROM (users'+
' left join users_pi on users.uid = users_pi.uid'+
' left join bills on users.uid = bills.uid'+
' left join dv_main on dv_main.uid = users.uid )'+
' left join tarif_plans on dv_main.tp_id = tarif_plans.id'+
' left join groups on users.gid = groups.gid'+
' left join builds on users_pi.location_id = builds.id'+
' left join streets on builds.street_id = streets.id'+
' left join districts on streets.district_id = districts.id'+
' WHERE users.uid = '+results[0].uid,
function(err2, results2){
console.log(err2, results2);
if (results2){
results2[0]['user_phone'] = phone;
results2[0]['user_uid'] = results[0].uid;
results2[0]['uniqueid'] = event.uniqueid;
socket.emit('message',results2[0]);
}
if (err2){
socket.emit('error_connect',{msg:'Incorrect DB query'});
}
});
} else {
socket.emit('message',{unknown_user:1, user_phone:phone, uniqueid:event.uniqueid});
}
}
if (err){
socket.emit('error_connect',{msg:'Incorrect DB query'});
}
});
}
}
});
nami.on('namiConnectionError', function (event) {
socket.emit('error_connect',{msg:'Incorrect host or port'});
});
nami.on('namiLoginIncorrect', function () {
socket.emit('error_connect',{msg:'Incorrect login or password'});
});
nami.open();
socket.on('disconnect_this', function () {
socket.disconnect();
nami.close();
connection.end();
});
});