Advertisement
Guest User

Untitled

a guest
May 20th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.45 KB | None | 0 0
  1. var express = require('express');
  2. var parseurl = require('parseurl');
  3. var session = require('express-session')({
  4. secret: 'pathtoencodesessionwithawesomesecret',
  5. resave: false,
  6. saveUninitialized: true
  7. });
  8. var bodyParser = require('body-parser');
  9. var mysql = require('mysql');
  10. var crypto = require('crypto');
  11. var ent = require('ent');
  12. var urlencodedParser = bodyParser.urlencoded({ extended: false });
  13. var sharedsession = require('express-socket.io-session');
  14.  
  15. var app = express();
  16. var server = require('http').createServer(app);
  17. var io = require('socket.io').listen(server);
  18. io.use(sharedsession(session));
  19. io.of('/namespace').use(sharedsession(session, {
  20. autoSave: true
  21. }));
  22.  
  23. var connected = [];
  24. var connections = {}
  25. var writting = [];
  26.  
  27. var connection = mysql.createConnection({
  28. host : 'localhost',
  29. user : 'root',
  30. password : 'emilie160612',
  31. database : 'Member'
  32. });
  33. connection.connect();
  34.  
  35. app.use(session)
  36. .use(function (req, res, next) {
  37. var pathname = parseurl(req).pathname;
  38.  
  39. next()
  40. })
  41. .get('/', function (req, res) {
  42. var index = connected.indexOf(undefined);
  43. while (index != -1) {
  44. connected.splice(index, 1);
  45. index = connected.indexOf(undefined);
  46. }
  47.  
  48. if (req.session.identifier) {
  49. res.sendFile(__dirname + '/index.html');
  50. } else {
  51. if (res.cookies && res.cookies.account) {
  52. connection.query('SELECT Identifier, Username FROM User WHERE Identifier = ' + res.cookies.account, function(err, rows, fields) {
  53. if (!err) {
  54. if (rows.length > 0) {
  55. req.session.username = rows[0]['Username'];
  56. req.session.identifier = rows[0]['Identifier'];
  57. res.redirect('/');
  58. }
  59. }
  60. });
  61. }
  62. res.redirect('/connection');
  63. }
  64. })
  65. .get('/css/style.css', function (req, res) {
  66. res.sendFile(__dirname + '/css/style.css');
  67. })
  68. .get('/css/connection.css', function (req, res) {
  69. res.sendFile(__dirname + '/css/connection.css');
  70. })
  71. .get('/main.js', function (req, res) {
  72. res.sendFile(__dirname + '/main.js');
  73. })
  74. .get('/jquery.js', function (req, res) {
  75. res.sendFile(__dirname + '/jquery.js');
  76. })
  77. .get('/connection', function (req, res, next) {
  78. res.sendFile(__dirname + '/connection.html');
  79. })
  80. .post('/connection', urlencodedParser, function(req, res, next) {
  81. var password = crypto.createHash('md5').update(req.body.password).digest('hex');
  82. connection.query('SELECT Identifier, Username FROM User WHERE Username = "' + req.body.username + '" AND Password = "' + password + '"', function(err, rows, fields) {
  83. if (!err) {
  84. if (rows.length > 0) {
  85. req.session.username = rows[0]['Username'];
  86. req.session.identifier = rows[0]['Identifier'];
  87.  
  88. if (req.body.remember) {
  89. res.cookie('account', req.session.identifier, { maxAge: 1000 * 3600 * 24 * 365 });
  90. }
  91. res.redirect('/');
  92. }
  93. }
  94. });
  95.  
  96. // Envoyer message : Pseudo ou mot de passe invalide
  97. })
  98. .get('/register', function (req, res) {
  99. res.sendFile(__dirname + '/register.html');
  100. })
  101. .post('/register', urlencodedParser, function(req, res) {
  102. var found = false;
  103. connection.query('SELECT Identifier, Username FROM User WHERE Username = "' + req.body.username + '"', function(err, rows, fields) {
  104. if (!err) {
  105. if (rows.length > 0) {
  106. found = true;
  107. }
  108. }
  109. });
  110.  
  111. if (!found) {
  112. var password = crypto.createHash('md5').update(req.body.password).digest('hex');
  113.  
  114. connection.query('INSERT INTO User (Username, Password) VALUES ("' + req.body.username + '", "' + password + '")');
  115.  
  116. res.redirect('/connection');
  117. } else {
  118. // Envoyer message : Compte existe déjà
  119. }
  120. })
  121. .get('/logout', function (req, res, next) {
  122. req.session = null;
  123. res.redirect('/connection');
  124. });
  125.  
  126. io.sockets.on('connection', function (socket) {
  127. var sessionID = socket.handshake.sessionID;
  128.  
  129. if (connected.indexOf(socket.handshake.session.username) == -1) {
  130. connected.push(socket.handshake.session.username)
  131. }
  132. if ('undefined' == typeof connections[sessionID]) {
  133. // Première connexion
  134. connections[sessionID] = { 'length': 0 };
  135. socket.broadcast.emit('newUser', {username: socket.handshake.session.username, connectedList : connected});
  136. }
  137. connections[sessionID][socket.id] = socket;
  138. connections[sessionID].length ++;
  139. socket.emit('connected', {username: socket.handshake.session.username, connectedList : connected});
  140.  
  141. socket.emit('writting', {writting: writting});
  142.  
  143. socket.on('message', function (message) {
  144. message = ent.encode(message);
  145. socket.broadcast.emit('message', {username: socket.handshake.session.username, message: message, me: false});
  146. socket.emit('message', {username: socket.handshake.session.username, message: message, me: true});
  147. console.log('===============================================')
  148. console.log('connectedList : '+connected);
  149. console.log('sessionID : '+sessionID);
  150. console.log('socket.id : '+socket.id);
  151. console.log('connections :');
  152. console.log(connections);
  153. console.log('')
  154. });
  155.  
  156. socket.on('writting', function (state) {
  157. var send = false;
  158. if (state) {
  159. if (writting.indexOf(socket.handshake.session.username) == -1) {
  160. writting.push(socket.handshake.session.username);
  161. send = true;
  162. }
  163. } else {
  164. var index = writting.indexOf(socket.handshake.session.username);
  165. if (index >= 0) {
  166. writting.splice(index, 1);
  167. send = true;
  168. }
  169. }
  170.  
  171. if (send) {
  172. socket.broadcast.emit('writting', {writting: writting});
  173. socket.emit('writting', {writting: writting});
  174. }
  175. });
  176.  
  177. socket.on('disconnect', function () {
  178. var userConnections = connections[sessionID];
  179. if (connections[sessionID].length && connections[sessionID][socket.id]) {
  180. connections[sessionID].length --;
  181. delete connections[sessionID][socket.id];
  182. }
  183.  
  184. if (connections[sessionID].length == 0) {
  185. var index = connected.indexOf(socket.handshake.session.username);
  186. if (index >= 0) {
  187. connected.splice(index, 1);
  188. }
  189.  
  190. index = writting.indexOf(socket.handshake.session.username);
  191. if (index >= 0) {
  192. writting.splice(index, 1);
  193. send = true;
  194. }
  195.  
  196. socket.broadcast.emit('logout', {username: socket.handshake.session.username, connectedList : connected});
  197. console.log('Déconnecté : ' + sessionID + ' (' + socket.handshake.session.username + ')');
  198. }
  199. });
  200. });
  201.  
  202. server.listen(9000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement