Advertisement
Akane13

heartbeat

May 22nd, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 manageSocket = (socket, name) => {
  23. };
  24.  
  25. const getChatState = () => {
  26.   return {
  27.     history: chatHistory.chat,
  28.     users: Object.keys(connectedUsers).filter((userName) => connectedUsers[userName]),
  29.     heartbeat: heartBeat,
  30.   }
  31. };
  32.  
  33. const chatChannel = io
  34.   .of('/chat')
  35.   .on('connect', (socket) => {
  36.     socket.emit('chatStatus', getChatState());
  37.     socket.heartbeat = setTimeout(() => {
  38.       const {userName} = socket;
  39.       if (userName) {
  40.         connectedUsers[userName] = false;
  41.         socket.broadcast.emit('userDisconnected', userName);
  42.         socket.disconnect();
  43.       }
  44.     }, heartBeat * 2);
  45.     socket.on('heartbeat', () => {
  46.       clearTimeout(socket.heartbeat);
  47.       socket.heartbeat = setTimeout(() => {
  48.         const {userName} = socket;
  49.         if (userName) {
  50.           connectedUsers[userName] = false;
  51.           socket.broadcast.emit('userDisconnected', userName);
  52.           socket.disconnect();
  53.         }
  54.       }, heartBeat * 2);
  55.     });
  56.     socket.on('setUsername', (data) => {
  57.       socket.userName = data;
  58.       connectedUsers[data] = true;
  59.       socket.broadcast.emit('userConnected', data);
  60.     });
  61.     socket.on('message', (data) => {
  62.       const date = moment();
  63.       const {message, author} = data;
  64.       if (!message || !author) {
  65.         console.error('wrong message', data);
  66.         return;
  67.       }
  68.       const chatMessage = {author, message, date};
  69.       chatHistory.chat = [...chatHistory.chat, chatMessage];
  70.       socket.broadcast.emit('message', chatMessage);
  71.     });
  72.     socket.on('disconnect', () => {
  73.       const {userName} = socket;
  74.       if (userName) {
  75.         connectedUsers[userName] = false;
  76.         socket.broadcast.emit('userDisconnected', userName);
  77.       }
  78.     });
  79.   });
  80.  
  81. // const news = io
  82. //   .of('/news')
  83. //   .on('connect', (socket) => {
  84. //     console.log('Uruchomiłem kanał „/news”');
  85. //     socket.on('message', (data) => {
  86. //       console.log(`/news: ${data}`);
  87. //       socket.emit('message', `/news: ${data}`);
  88. //     });
  89. //   });
  90.  
  91. httpServer.listen(3000, () => {
  92.   console.log('Serwer HTTP działa na pocie 3000');
  93. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement