· 9 years ago · Feb 25, 2017, 01:56 PM
1process.title = 'Server Web http NodeJS';
2process.stdout.write('\033c');
3
4
5
6var colors = require('colors');
7var log4js = require('log4js');
8log4js.configure('logConfig.json', { cwd: 'D:/testnode/log' });
9var express = require('express');
10var cookieParser = require('cookie-parser');
11var app = express();
12var server = require('http').createServer(app);
13server.listen(80);
14var io = require('socket.io')(server);
15var mysql = require('mysql');
16var cookiesFl = {
17 connect: false
18};
19
20log4js.loadAppender('file');
21
22var logs = {
23 hello: log4js.getLogger('hello'),
24 chat: log4js.getLogger('hello')
25}
26
27logs.hello.info('Serveur lancé !');
28
29app.use(cookieParser());
30app.set('view engine', 'ejs');
31app.use(express.static(__dirname + '/views'));
32
33app.use(function (req, res, next) {
34 cookiesFl.connect = req.cookies.connect+"";
35 if (cookiesFl.connect!="undefined") {cookiesFl.connect=true} else {cookiesFl.connect=false}
36 next();
37});
38
39var passwordJoinSalon="";
40
41app.get('/', function(req, res) {
42 res.render('index.ejs', {connect:cookiesFl.connect, pseudo:req.cookies.connect});
43})
44.get('/anim', function(req, res) {
45 res.render('anim.ejs', {connect:cookiesFl.connect, pseudo:req.cookies.connect});
46})
47.get('/cursor', function(req, res) {
48 res.render('cursor.ejs', {connect:cookiesFl.connect, pseudo:req.cookies.connect});
49})
50.get('/application/:name', function(req, res) {
51 res.render(req.params.name+".ejs", {connect:cookiesFl.connect, pseudo:req.cookies.connect, salon:'none'});
52})
53.get('/application/chat/:salon', function(req, res) {
54 res.render("chats.ejs", {connect:cookiesFl.connect, pseudo:req.cookies.connect, salon:req.params.salon, password:passwordJoinSalon});
55})
56.get('/setcookie/:cookie/:info1', function(req, res) {
57 res.cookie(req.params.cookie ,req.params.info1).send('Cookie "'+req.params.cookie+'" is set');
58})
59.get('/delcookie/:cookie', function(req, res) {
60 res.clearCookie(req.params.cookie).send('Cookie "'+req.params.cookie+'" is del');
61})
62.use(function(req, res, next){
63 res.setHeader('Content-Type', 'text/plain');
64 res.send(404, 'Page introuvable !');
65});
66
67
68function mySqlCo(n) {
69 mySqlClient = mysql.createConnection({
70 host : "localhost",
71 user : "root",
72 password : "",
73 database : "flammrock"
74 });
75 mySqlClient.connect(function(err){
76 if(err){
77 if (n==0) {
78 console.log('Error connecting to Db');
79 logs.hello.info('Error connecting to Db');
80 console.log("Error conneion to Database..".red+"\n");
81 logs.hello.info('Error conneion to Database..');
82 }
83 return;
84 }
85 if (n==0) {
86 logs.hello.info('Connexion to Database is a success');
87 console.log("Connexion to Database is a "+"success".green+" !\n");
88 }
89 });
90}
91mySqlCo(0);
92
93
94var selectQuery = 'SELECT id FROM tchat';
95mySqlClient.query(
96 selectQuery,
97 function select(error, results, fields) {
98 if (error) {
99 console.log(error);
100 logs.hello.info(error);
101 mySqlClient.end();
102 return;
103 }
104 logs.hello.info('Table [tchat] : '+results.length+' messages');
105 console.log("Table".blue+" ["+"tchat".green+"] : "+(results.length+"").magenta+" message\n");
106 mySqlClient.end();
107 }
108);
109
110var NOW = function() {
111 var dat = new Date();
112 var h = dat.getHours()+"";
113 var m = dat.getMinutes()+"";
114 var s = dat.getSeconds()+"";
115 if (s.length==1) {s="0"+s}
116 if (m.length==1) {m="0"+m}
117 if (h.length==1) {h="0"+h}
118 return h+","+m+","+s;
119}
120var validateEmail = function(email) {
121 var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
122 return re.test(email);
123}
124function handler (request, response) {
125 request.addListener('end', function () {
126 fileServer.serve(request, response);
127 });
128}
129
130
131
132io.on('connection', function (client) {
133 client.on('Servinscription', function(account) {
134 var msg="",err=false;
135 if (account.pseudo!="") {
136 if (account.mail!="") {
137 if (validateEmail(account.mail)) {
138 if (account.password!="") {
139 if (account.cpassword!="") {
140 if (account.password==account.cpassword) {
141 mySqlCo(1);
142 msg="Votre compte a bien été créé !",err=false;
143 mySqlClient.query('INSERT INTO membres SET ?', { Mpseudo: account.pseudo, Mmail: account.mail, Mpassword: account.password }, function(erre,res){
144 if (erre) {msg="Surcharge de la base de données ! Veuillez réessayer dans quelques secondes !",err=true;return;}
145 });
146 logs.hello.info('[SERVER] '+account.pseudo+' vient de s\'inscrire !');
147 console.log('['+'SERVER'.rainbow+'] '+(account.pseudo).blue+' vient de s\'inscrire !'.green);
148 } else {
149 msg="Le mot de passe de confirmation ne correspond pas !",err=true;
150 }
151 } else {
152 msg="Veuillez confirmer votre mot de passe !",err=true;
153 }
154 } else {
155 msg="Veuillez indiquer un mot de passe !",err=true;
156 }
157 } else {
158 msg="Veuillez indiquer un email valide !",err=true;
159 }
160 } else {
161 msg="Veuillez indiquer un email !",err=true;
162 }
163 } else {
164 msg="Veuillez indiquer un pseudo !",err=true;
165 }
166 client.emit("ServRinscription",{msg: msg, err: err});
167 });
168 client.on('Servconnexion', function(account) {
169 var msg="Une erreur est survenue :(",err=true;
170 if (account.pseudo!="") {
171 if (account.password!="") {
172 mySqlCo(1);
173 var selectQuery = 'SELECT * FROM membres';
174 mySqlClient.query(
175 selectQuery,
176 function select(error, results, fields) {
177 if (error) {
178 logs.hello.info(error);
179 console.log(error);
180 mySqlClient.end();
181 return;
182 }
183 for (var i=0; i<results.length; i++) {
184 if (results[i].Mpseudo==account.pseudo && results[i].Mpassword==account.password) {
185 msg="Félicitation ! Vous êtes connectés !",err=false;
186 }
187 }
188 if (err) {
189 msg="Le pseudo ou/et le mot de passe ne correspendent pas !";
190 } else {
191 logs.hello.info('[SERVER] '+account.pseudo+' vient de se connecter !');
192 console.log('['+'SERVER'.rainbow+'] '+(account.pseudo).blue+' vient de se connecter !'.green);
193 }
194 client.emit("ServRconnexion",{msg: msg, err: err, pseudo: account.pseudo});
195 mySqlClient.end();
196 }
197 );
198 } else {
199 msg="Veuillez indiquer un mot de passe !",err=true;
200 client.emit("ServRconnexion",{msg: msg, err: err, pseudo: account.pseudo});
201 }
202 } else {
203 msg="Veuillez indiquer un pseudo !",err=true;
204 client.emit("ServRconnexion",{msg: msg, err: err, pseudo: account.pseudo});
205 }
206 });
207 client.on('ServDeconnexion', function(account) {
208 logs.hello.info('[SERVER] '+account.pseudo+' vient de se déconnecter !');
209 console.log('['+'SERVER'.rainbow+'] '+(account.pseudo).blue+' vient de se déconnecter !'.red);
210 });
211
212 client.on('GetAppInfo', function(app) {
213 var info='';
214 if (app.name=="chat") {
215 info='<b>Nom :</b> chat<br /><b>Version :</b> 0.4.2<br /><b>Type :</b> Multi<br /><b>Créateur :</b> Flammrock<br /><b>Publication :</b> 24/02/2017<hr /><button type="button" onclick="document.location.replace(\'\'+document.location.origin+\'/application/'+app.name+'\');" class="btn btn-lg btn-primary">>>> Chat</button>';
216 } else if (app.name=="cursor") {
217 info='<b>Nom :</b> Cursor Game<br /><b>Version :</b> 0.0.5<br /><b>Type :</b> Jeu Multijoueur<br /><b>Créateur :</b> Flammrock<br /><b>Publication :</b> 25/02/2017<hr /><button type="button" onclick="document.location.replace(\'\'+document.location.origin+\'/application/'+app.name+'\');" class="btn btn-lg btn-primary">>>> Jouer à Cursor</button>';
218 } else {
219 info='<b>Nom :</b> <span style="#07f">Unknown</span><br /><b>Version :</b> <span style="#07f">Unknown</span><br /><b>Type :</b> <span style="#07f">Unknown</span><br /><b>Créateur :</b> <span style="#07f">Unknown</span><br /><b>Publication :</b> <span style="#07f">Unknown</span><hr /><button type="button" class="btn btn-lg btn-primary">>>> Chat</button>';
220 }
221 client.emit('RGetAppInfo', {name: app.name, info: info});
222 });
223
224 client.on('TchatConnect', function(get) {
225 client.pseudo = get.pseudo;
226 client.salon = get.salon;
227 var password="Unknown";
228 mySqlCo(1);
229 var selectQuery = 'SELECT * FROM salon';
230 mySqlClient.query(
231 selectQuery,
232 function select(error, results, fields) {
233 mySqlClient.end();
234 if (error) {
235 logs.chat.info(error);
236 console.log(error);
237 return;
238 }
239 for (var i=0; i<results.length; i++) {
240 if ((results[i].Sidsalon).toLowerCase()==(get.salon).toLowerCase()) {
241 password=results[i].Spassword;
242 }
243 }
244 if (password!=get.salonPassword) {
245 client.salon = "undefined";
246 client.passwordJoinSalon = "undefined";
247 client.emit('RchangeU');
248 } else {
249 mySqlCo(1);
250 var selectQueryy = 'SELECT * FROM salon_'+client.salon;
251 mySqlClient.query(
252 selectQueryy,
253 function select(error, results, fields) {
254 mySqlClient.end();
255 if (error) {
256 logs.chat.info(error);
257 console.log(error);
258 client.salon = "undefined";
259 client.emit('RchangeU');
260 } else {
261 setTimeout(function(){
262 for (var i=0; i<results.length; i++) {
263 if (results[i].pseudo==client.pseudo) {
264 client.emit('Rchat', {date:results[i].datetc, message:results[i].message, user:"vous", salon:client.salon});
265 } else {
266 client.emit('Rchat', {date:results[i].datetc, message:results[i].message, user:results[i].pseudo, salon:client.salon});
267 }
268 }
269 var date_=NOW();
270 logs.chat.info('[Tchat]['+client.salon+'] -'+client.pseudo+' vient de se connecter !');
271 console.log('['+'Tchat'.magenta+']['+(client.salon).green+'] -'+date_+'- '+(client.pseudo).blue+' vient de se connecter !'.green);
272 client.emit('RTchatConnect', {type:"vous", pseudo:client.pseudo, salon:client.salon});
273 client.broadcast.emit('RTchatConnect', {type:"Client", pseudo:client.pseudo, salon:client.salon});
274 },400);
275 }
276 }
277 );
278 }
279 }
280 );
281 });
282 client.on('TchatCheckSalon', function() {
283 var data={},bdata=[],a=0;
284 mySqlCo(1);
285 var selectQuery = 'SELECT * FROM salon';
286 mySqlClient.query(
287 selectQuery,
288 function select(error, results, fields) {
289 if (error) {
290 logs.chat.info(error);
291 console.log(error);
292 mySqlClient.end();
293 return;
294 }
295 for (var i=0; i<results.length; i++) {
296 if (typeof data[results[i].Snamesalon] == "undefined") {
297 if (results[i].Spassword=="") {
298 data[results[i].Snamesalon]=true;
299 bdata[a]={name: results[i].Snamesalon, id: results[i].Sidsalon};
300 a++;
301 }
302 }
303 }
304 client.emit('RTchatCheckSalon', bdata);
305 mySqlClient.end();
306 }
307 );
308 });
309 client.on('TchatCreateSalon', function(get) {
310 var date_=NOW();
311 var IDsaloon="public_"+get.idsalon;
312 var msg="Votre salon a été créé !",err=false;
313 if (get.password!="") {IDsaloon="private_"+get.idsalon;}
314 mySqlCo(1);
315 var selectQuery = 'SELECT * FROM salon';
316 mySqlClient.query(
317 selectQuery,
318 function select(error, results, fields) {
319 if (error) {
320 logs.chat.info(error);
321 console.log(error);
322 mySqlClient.end();
323 return;
324 }
325 for (var i=0; i<results.length; i++) {
326 if (results[i].Snamesalon == get.namesalon || results[i].Sidsalon == IDsaloon) {
327 msg="Ce salon existe déjà !",err=true;
328 }
329 }
330 if (!err) {
331 logs.chat.info('[Tchat] - '+get.pseudo+ ' : vient de créer un salon de chat -> ('+IDsaloon+")");
332 console.log('['+'Tchat'.magenta+'] -'+date_+"- "+(get.pseudo).blue + ' : vient de créer un salon de chat ('+IDsaloon+")");
333 mySqlClient.query('INSERT INTO salon SET ?', { Spseudo: get.pseudo, Sidsalon: IDsaloon, Snamesalon: get.namesalon, Spassword: get.password }, function(err,res){});
334 var tableDef = 'CREATE TABLE IF NOT EXISTS salon_'+IDsaloon+' ('+
335 'id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,'+
336 'message VARCHAR(300) NOT NULL,'+
337 'pseudo VARCHAR(16) NOT NULL,'+
338 'datetc VARCHAR(45) NOT NULL,'+
339 'PRIMARY KEY (id)'+
340 ') ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1';
341 mySqlClient.query(tableDef, function select(error, results) {
342 if (error) logs.chat.info(error);
343 });
344 }
345 client.emit('RTchatCreateSalon',{msg:msg,err:err});
346 mySqlClient.end();
347 }
348 );
349
350
351
352
353 });
354 client.on('TchatJoinSalon', function(get) {
355 var data={err:true,salon:"none",msg:'Une erreur est survenue !'};
356 var ok=true;
357 if (get.id!="") {
358 if (get.password!="") {
359 passwordJoinSalon=get.password;
360 mySqlCo(1);
361 var selectQuery = 'SELECT * FROM salon';
362 mySqlClient.query(
363 selectQuery,
364 function select(error, results, fields) {
365 if (error) {
366 logs.chat.info(error);
367 console.log(error);
368 data.msg='Une erreur est survenue dans la base de donnée !';
369 mySqlClient.end();
370 return;
371 }
372 ok=false;
373 for (var i=0; i<results.length; i++) {
374 if (results[i].Sidsalon=='private_'+get.id && results[i].Spassword==get.password) {
375 client.emit('RTchatJoinSalon', {err:false,salon:'private_'+get.id,msg:'success !'});
376 }
377 }
378 mySqlClient.end();
379 }
380 );
381 } else {
382 data.msg='Veuillez indiquer le mot de passe du salon à rejoindre !',err=true;
383 }
384 } else {
385 data.msg='Veuillez indiquer l\'id du salon à rejoindre !',err=true;
386 }
387 if (ok) {client.emit('RTchatJoinSalon', data)}
388 });
389 client.on('Tchat', function(get) {
390 if (typeof client.pseudo != "undefined" && client.salon!="undefined") {
391 var date_=NOW();
392 client.emit('Rchat', {date: date_, message:get, user:"vous", salon: client.salon});
393 client.broadcast.emit('Rchat', {date: date_, message:get, user:client.pseudo, salon: client.salon});
394 logs.chat.info('[Tchat]['+client.salon+'] - '+client.pseudo+' : '+get);
395 console.log('['+'Tchat'.magenta+']['+(client.salon).green+'] -'+date_+"- "+(client.pseudo).blue + ' : ' + get);
396 mySqlCo(1);
397 var salooon='salon_'+client.salon;
398 mySqlClient.query('INSERT INTO '+salooon+' SET ?', { datetc: date_, message: get, pseudo: client.pseudo }, function(err,res){
399 if (err) {
400 logs.chat.info(err);
401 console.log(err);
402 }
403 });
404 }
405 });
406
407
408 client.on('disconnect', function(data) {
409 if (typeof client.pseudo != "undefined" && client.salon!="undefined") {
410 passwordJoinSalon="";
411 var date_=NOW();
412 client.emit('RTchatdisconnect', {type:"vous", pseudo:client.pseudo, salon:client.salon});
413 client.broadcast.emit('RTchatdisconnect', {type:"Client", pseudo:client.pseudo, salon:client.salon});
414 logs.chat.info('[Tchat]['+client.salon+'] - '+client.pseudo+' vient de se déconnecter !');
415 console.log('['+'Tchat'.magenta+']['+(client.salon).green+'] -'+date_+'- '+(client.pseudo).blue+' vient de se déconnecter !'.red);
416 client.pseudo="undefined";
417 client.salon="undefined";
418 }
419 });
420
421 client.on('mousemove', function (data) {
422 client.broadcast.emit('moving', data);
423 });
424});