-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
114 lines (94 loc) · 3.67 KB
/
app.js
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
var http = require('http');
var fs = require('fs');
var xpath = require('xpath')
, dom = require('xmldom').DOMParser
var express = require('express');
var path = require('path');
const PORT = process.env.PORT || 5000;
var app = express();
var server = require('http').Server(app);
var botsFile = fs.readFileSync('./bot.xml', {encoding: 'utf-8'});
var bots = new dom().parseFromString(botsFile);
var listBots = xpath.evaluate(
"/bots/bot", // xpathExpression
bots, // contextNode
null, // namespaceResolver
xpath.XPathResult.ANY_TYPE, // resultType
null // result
);
var node = null;
var botsRead= [];
node = listBots.iterateNext();
while (node) {
//console.log(node.localName + ": " + node.firstChild);
var tmp_display = xpath.select1( "@display", node).value;
var tmp_code = xpath.select1( "@code", node).value;
botsRead.push({display: tmp_display, code: tmp_code});
//console.log("Node: " + node.toString());
node = listBots.iterateNext();
}
app.use(express.static(path.join(__dirname, 'public')));
// Loading socket.io
var io = require('socket.io').listen(server);
// When a client connects, we note it in the console
io.sockets.on('connection', function (socket) {
socket.emit('botMessage','Bonjour, sur quelle application souhaitez-vous que je vous aide ?');
socket.emit('initialchoices',botsRead );
socket.on('initialchoice', function (appli) {
//on renvoie à l'expéditeur son message pour qu'il l'affiche
socket.emit('humanMessage',appli.display );
// on envoie le texte associé au choix
var botmessage = xpath.select1("string(/bots/bot[@code='"+ appli.appli +"']/text)", bots);
socket.emit('botMessage',botmessage);
//on renvoie les choix suivants
var listChoices = xpath.evaluate(
"/bots/bot[@code='"+ appli.appli +"']/choices/choice", // xpathExpression
bots, // contextNode
null, // namespaceResolver
xpath.XPathResult.ANY_TYPE, // resultType
null // result
);
var nodechoices = null;
var choicesRead= [];
nodechoices = listChoices.iterateNext();
while (nodechoices) {
var tmp_display = xpath.select1( "@text", nodechoices).value;
var tmp_code = xpath.select1( "@id", nodechoices).value;
choicesRead.push({display: tmp_display, id: tmp_code});
nodechoices = listChoices.iterateNext();
}
socket.emit('choices',choicesRead );
});
socket.on('choice', function (appli) {
//on renvoie à l'expéditeur son message pour qu'il l'affiche
socket.emit('humanMessage',appli.display );
// on envoie le texte associé au choix
var botmessage = xpath.select1("string(//choices/choice[@id='"+ appli.id +"']/text)", bots);
socket.emit('botMessage',botmessage);
//on renvoie les choix suivants
var listChoices = xpath.evaluate(
"//choices/choice[@id='"+ appli.id +"']/choices/choice", // xpathExpression
bots, // contextNode
null, // namespaceResolver
xpath.XPathResult.ANY_TYPE, // resultType
null // result
);
var nodechoices = null;
var choicesRead= [];
nodechoices = listChoices.iterateNext();
while (nodechoices) {
var tmp_display = xpath.select1( "@text", nodechoices).value;
var tmp_code = xpath.select1( "@id", nodechoices).value;
choicesRead.push({display: tmp_display, id: tmp_code});
nodechoices = listChoices.iterateNext();
}
if ( choicesRead.length > 0)
{
socket.emit('choices',choicesRead );
}
else{
socket.emit('replay' );
}
});
});
server.listen(PORT);