root 1 year ago
parent
commit
9efc6178a6
1 changed files with 44 additions and 30 deletions
  1. 44 30
      node/message.js

+ 44 - 30
node/message.js

@@ -520,34 +520,20 @@ us.login = function (requset, response, userid, pageid, username, type) {
 }
 
 /**
-* 用户下线
-* @param {object} response 响应对象
-* @param {string} userid   用户ID
-* @param {string} pageid   页面ID(唯一识别ID)
+* 用户下线,清理用户的数据
 */
-us.offLine = function (response, userid, pageid) {
+us.deluser = function (pageid) {
+
     var i, j, z; //定义循环变量
     var _userid, _fileid, _message, _docinfo, _messageinfo,
         _csclids = us.offLineMessage[pageid].cscl,
         _wordids = us.offLineMessage[pageid].word, //得到加入的所有word
         _excelids = us.offLineMessage[pageid].excel; //得到加入的所有excel
+
     console.log(pageid)
     console.log(us.offLineMessage[pageid])
-    //删除用户连接
-    delete us.connect[userid][pageid];
-
     //删除用户离校消息记录
     delete us.offLineMessage[pageid];
-
-    //取消用户
-    if (us.connect[userid]) {
-        for (z in us.connect[userid]) { break }
-        if (!z) {
-            //用户登录数据清理,用于已经下线
-            delete us.user[userid];
-            delete us.connect[userid];
-        }
-    }
     console.log("1111111111111")
     console.log(_csclids)
     //知识架构的下线的处理
@@ -591,8 +577,33 @@ us.offLine = function (response, userid, pageid) {
         }
     }
 
+}
 
-
+/**
+* 用户下线,用计时器实时的监控用户是否在线
+*/
+us.offLine = function () {
+    var i, j, istrue = true;
+    var _user, _connect = us.connect;
+    //循环目前所有的连接用户
+    for (i in _connect) {
+        _user = _connect[i];
+        for (j in _user) {
+            //判断用户已下线
+            if (_user[j].response.writableEnded) {
+                us.deluser(j); //删除用户的数据
+                delete _user[j]
+            }
+        }
+        for (j in _user) { istrue = false; break }
+        //这个用户下所有的连接用户都不在了
+        if (istrue) {
+            //用户登录数据清理,用于已经下线
+            delete us.user[userid];
+            delete us.connect[userid];
+        }
+        istrue = true;
+    }
 }
 
 /**
@@ -604,14 +615,15 @@ us.offLine = function (response, userid, pageid) {
 **/
 us.polling = function (requset, response, userid, pageid, type) {
     // 监听请求的close事件
-    requset.on('close', () => {
-        console.log("--------" + userid + "-------------" + pageid);
-        //us.offLine(response, userid, pageid)
-    });
+    // requset.on('close', () => {
+    //     console.log("--------" + userid + "-------------" + pageid);
+    //     //us.offLine(response, userid, pageid)
+    // });
+
     //判断轮询的用户是否在连接池中
     if (us.connect[userid]) {
         var _userarray = us.connect[userid], //用户连接池,获取制定用户连接的数量,
-            _messagearray = us.offLineMessage[pageid] //用户离校消
+            _messagearray = us.offLineMessage[pageid] //用户离线信
             ;
         //获取当前连接的用户,如果获取成功那么直接修改用户的连接
         if (_userarray[pageid]) {
@@ -859,7 +871,7 @@ us.updatecscl = function (messageInfo, classId, ty) {
                 _obj.nodes.push(messageInfo.nodes[j])
             }
         }
-        console.log(_obj);
+        //console.log(_obj);
         //如果不存在则去数据库查找
         us.mysql.usselect(['172.16.12.5', 'pbl', 'updateRoomData', JSON.stringify(_obj), classId],
             function (ret) {
@@ -2091,14 +2103,14 @@ us.getcscl = function (response, calssid, pageid, userid) {
                 var _user = us.getuserbytype(us.cscl[calssid].user); //获取当前项目下所有的用户信息
                 var _data = us.cscl[calssid].content; //保存在内存的知识建构数据
                 if (ret) {
-                    console.log("eeee");
-                    console.log(us.offLineMessage[pageid]);
+                    //console.log("eeee");
+                    //console.log(us.offLineMessage[pageid]);
                     ret[0][0].user = _user; //这里是项目当前所有用户
                     ret[0][0].data = _data; //把思维网格的内容转化成数组
                     if (userid && us.user[userid]) {
                         us.sendUser(us.user[userid], "cscl", pageid, calssid); //加入知识建构项目后通知所有的用户
                     }
-                    console.log(ret[0][0].user)
+                    //console.log(ret[0][0].user)
                     response.end(JSON.stringify(ret)); //返回文档内容
                 }
                 else {
@@ -2120,8 +2132,8 @@ us.getcscl = function (response, calssid, pageid, userid) {
             function (ret) {
                 var _user = us.getuserbytype(us.cscl[calssid].user);
                 if (ret) {
-                    console.log("bbbbbbbbbbbbbbb");
-                    console.log(us.offLineMessage[pageid]);
+                    //console.log("bbbbbbbbbbbbbbb");
+                    //console.log(us.offLineMessage[pageid]);
                     ret[0][0].user = _user; //这里是项目当前所有用户
                     us.cscl[calssid].content = JSON.parse(ret[0][0].data); //把思维网格的内容转化成数组
                     //us.sendUser(us.user[userid], "cscl", pageid, calssid); //加入知识建构项目后通知所有的用户
@@ -2434,6 +2446,8 @@ us.createGuid = function () {
 *
 **/
 us.server.listen('1473', '', function () {
+    //用户下线监控
+    setInterval(function () { us.offLine() }, 10000);
     //在控制台输出监听提示
     console.log("开始监听" + us.server.address().port + "......");
 });