美文网首页
nodejs-websocket代码nodejs版本

nodejs-websocket代码nodejs版本

作者: jackson等567人 | 来源:发表于2018-05-11 17:18 被阅读0次

nodejs-websocket代码nodejs版本

function websocket(server) {
    var io = require('socket.io')(server);
  var Message = require('../models/message')
    var users = {}

    io.on('connection', function (socket) {

      //监听用户发布聊天内容
  socket.on('message', function (obj) {
        //向所有客户端广播发布的消息
  var mess = {
          username: obj.username,
  src:obj.src,
  msg: obj.msg,
  img: obj.img,
  roomid: obj.room,
  time: obj.time
  }
        io.to(mess.roomid).emit('message', mess)
        global.logger.info(obj.username + '对房' + mess.roomid+'说:'+ mess.msg)
        // console.log(obj.username + '对房' + mess.roomid+'说:'+ mess.msg)
  if (obj.img === '') {
          var message = new Message(mess)
          message.save(function (err, mess) {
            if (err) {
              // console.log(err)
  global.logger.error(err)
            }
            // console.log(mess)
  global.logger.info(mess)
          })
        }
      })
      socket.on('login',function (obj) {
        socket.name = obj.name
  socket.room = obj.roomid
  if (!users[obj.roomid]) {
          users[obj.roomid] = {}
        }
        users[obj.roomid][obj.name] = obj
        socket.join(obj.roomid)
        io.to(obj.roomid).emit('login', users[obj.roomid])
        global.logger.info(obj.name + '加入了' + obj.roomid)
      })
      socket.on('logout',function (obj) {
        try{
          const is = Object.hasOwnProperty.call(users[obj.roomid], obj.name)
          if (is) {
            delete users[obj.roomid][obj.name]
            global.logger.info(obj.name + '退出了' + obj.roomid)
            io.to(obj.roomid).emit('logout', users[obj.roomid])
            socket.leave(obj.roomid)
          }
        }
        catch (e) {
          global.logger.error(e)
        }
      })

      socket.on('disconnect', function () {
        console.log(socket.room, socket.name);
  if (users[socket.room] && users[socket.room].hasOwnProperty(socket.name)) {
          delete users[socket.room][socket.name]
          // 用户监听用退出聊天室
  global.logger.info(socket.name + '退出了' + socket.room)
          socket.leave(socket.roomid)
          io.to(socket.room).emit('logout', users[socket.room])
        }
      })
    })
}

module.exports = websocket

相关文章

网友评论

      本文标题:nodejs-websocket代码nodejs版本

      本文链接:https://www.haomeiwen.com/subject/crxqdftx.html