Advertisement
Akane13

tsw pokoje

May 27th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. //jshint node: true, esversion: 6
  2. const moment = require('moment');
  3. const connect = require('connect');
  4. const app = connect();
  5. const serveStatic = require('serve-static');
  6.  
  7. const httpServer = require('http').createServer(app);
  8.  
  9. const socketio = require('socket.io');
  10. const io = socketio.listen(httpServer);
  11.  
  12. app.use(serveStatic('public'));
  13.  
  14. const heartBeat = 5000;
  15.  
  16. const chatHistory = {
  17. chat: [],
  18. };
  19.  
  20. const connectedUsers = {};
  21.  
  22. const getChatState = (name) => {
  23. return {
  24. history: chatHistory[name],
  25. users: Object.keys(connectedUsers).filter((userName) => connectedUsers[userName]),
  26. heartbeat: heartBeat,
  27. rooms: Object.keys(chatHistory),
  28. }
  29. };
  30.  
  31. const manageSocket = (name) => {
  32. if (chatHistory[name] === undefined) {
  33. chatHistory[name] = [];
  34. }
  35. io
  36. .of(`/${name}`)
  37. .on('connect', (socket) => {
  38. socket.emit('chatStatus', getChatState(name));
  39. socket.heartbeat = setTimeout(() => {
  40. const {userName} = socket;
  41. if (userName) {
  42. connectedUsers[userName] = false;
  43. socket.broadcast.emit('userDisconnected', userName);
  44. socket.disconnect();
  45. }
  46. }, heartBeat * 2);
  47. socket.on('heartbeat', () => {
  48. clearTimeout(socket.heartbeat);
  49. socket.heartbeat = setTimeout(() => {
  50. const {userName} = socket;
  51. if (userName) {
  52. connectedUsers[userName] = false;
  53. socket.broadcast.emit('userDisconnected', userName);
  54. socket.disconnect();
  55. }
  56. }, heartBeat * 2);
  57. });
  58. socket.on('setUsername', (data) => {
  59. socket.userName = data;
  60. connectedUsers[data] = true;
  61. socket.broadcast.emit('userConnected', data);
  62. });
  63. socket.on('message', (data) => {
  64. const date = moment();
  65. const {message, author} = data;
  66. if (!message || !author) {
  67. console.error('wrong message', data);
  68. return;
  69. }
  70. const chatMessage = {author, message, date};
  71. chatHistory[name] = [...chatHistory[name], chatMessage];
  72. socket.emit('message', chatMessage);
  73. socket.broadcast.emit('message', chatMessage);
  74. });
  75. socket.on('disconnect', () => {
  76. const {userName} = socket;
  77. if (userName) {
  78. connectedUsers[userName] = false;
  79. socket.broadcast.emit('userDisconnected', userName);
  80. }
  81. });
  82. socket.on('createRoom', (data) => {
  83. manageSocket(data);
  84. socket.emit('roomCreated', data);
  85. socket.broadcast.emit('roomCreated', data);
  86. });
  87. });
  88. };
  89.  
  90. manageSocket('chat');
  91. manageSocket('room2');
  92.  
  93. httpServer.listen(3000, () => {
  94. console.log('Serwer HTTP działa na pocie 3000');
  95. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement