浏览代码

Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/CocoRoboDesktop into beta

lsc 1 年之前
父节点
当前提交
7062e25e94
共有 2 个文件被更改,包括 123 次插入67 次删除
  1. 26 21
      js/Office/Poll.js
  2. 97 46
      node/message.js

+ 26 - 21
js/Office/Poll.js

@@ -39,29 +39,36 @@ U.MD.O.P.polling = function (params) {
         var text = "";
         var xhr = new XMLHttpRequest();
         var data = "";
+        //var time = null;
+        //
+        var fun = function () {
+            //clearTimeout(time)
+            text = xhr.responseText;
+            var istrue = true;
+            while (start < text.length && istrue) {
+                end = text.indexOf(delimiter, start);//获取数据的是否已经结束
+                if (end > -1) {
+                    data += text.substring(start, end);
+                    start = end + delimiter.length;
+                    try {
+                        U.MD.O.P.pollingAsyn({ value: JSON.parse(data) })
+                    }
+                    catch (e) {
+                        console.log(e);
+                    }
+                    data = "";
+                }
+                else {
+                    istrue = false;
+                    //time = setTimeout(fun, 500);//
+                }
+            }
+        };
         xhr.open("POST", US.SCOKET, true);
         xhr.onreadystatechange = function () {
             //获取数据
             if (xhr.readyState == 3 && xhr.status == 200) {
-                text = xhr.responseText;
-                var istrue = true;
-                while (start < text.length && istrue) {
-                    end = text.indexOf(delimiter, start);//获取数据的是否已经结束
-                    if (end > -1) {
-                        data += text.substring(start, end);
-                        start = end + delimiter.length;
-                        try {
-                            U.MD.O.P.pollingAsyn({ value: JSON.parse(data) })
-                        }
-                        catch (e) {
-                            console.log(e);
-                        }
-                        data = "";
-                    }
-                    else {
-                        istrue = false;
-                    }
-                }
+                fun();
             }
             //结束重连
             else if (xhr.readyState == 4) {
@@ -84,8 +91,6 @@ U.MD.O.P.polling = function (params) {
     }
 }
 
-
-
 /* 
 * 处理从后台返回的数据
 *

+ 97 - 46
node/message.js

@@ -89,6 +89,21 @@ us.nav = {
     //}  //导航文档数据结构
 }
 
+//知识建构的数据结构
+us.cscldata = function () {
+    return {
+        id: "",
+        userid: "",
+        name: "",
+        num: "",
+        data: "",
+        isClose: "",
+        create_at: "",
+        createuser: "",
+        smailheadportrait: ""
+    };
+}
+
 /**
 * 用户链接类
 *
@@ -401,7 +416,7 @@ us.addUser = function (response, type, fileid, userids, userid, pageid) {
 **/
 us.getuserbytype = function (userids) {
     var _userinfo = [];
-    console.log(us.user);
+    //console.log(us.user);
     for (var i in userids) {
         if (us.user[i]) {
             _userinfo.push(us.user[i])
@@ -483,7 +498,7 @@ us.unifyDispose = function (req, res, cb) {
     });
 
     //设置30秒后超时
-    res.setTimeout(30000, function () {
+    res.setTimeout(60000, function () {
         try {
             //console.log("响应超时.");
             res.end(""); //返回值
@@ -631,9 +646,11 @@ us.polling = function (requset, response, userid, pageid, type) {
     // });
     //判断轮询的用户是否在连接池中
     if (us.connect[userid]) {
-        var _userarray = us.connect[userid], //用户连接池,获取制定用户连接的数量,
+        var _data,
+            _userarray = us.connect[userid], //用户连接池,获取制定用户连接的数量,
             _messagearray = us.offLineMessage[pageid] //用户离线信息
             ;
+        const chunkSize = 100;
         //获取当前连接的用户,如果获取成功那么直接修改用户的连接
         if (_userarray[pageid]) {
             //防止重复多连
@@ -645,7 +662,12 @@ us.polling = function (requset, response, userid, pageid, type) {
             }
             _userarray[pageid].response = response;
             if (_messagearray && _messagearray.message.length > 0) {
-                response.write(JSON.stringify(_messagearray.message) + "\r\n");
+                _data = JSON.stringify(_messagearray.message);
+                for (let i = 0; i < _data.length; i += chunkSize) {
+                    const chunk = _data.slice(i, i + chunkSize);
+                    response.write(chunk);
+                }
+                response.write("\r\n");
                 _messagearray.message = [];
             }
             else {
@@ -704,9 +726,23 @@ us.send = function (response, messageinfo) {
                 break;
             //未来课堂交互
             case "us.cscl":
+
                 _messagearr = _messageobj[i]; //获取未来消息
-                //得到word所有的用户
+                //得到未来课堂所有的用户
                 for (j = 0; j < _messagearr.length; j++) {
+                    // //如果存在则直接返回内层的文档
+                    // if (!us.cscl[calssid].user[userid]) {
+                    //     us.cscl[calssid].user[userid] = [pageid];
+                    // }
+                    // else if (us.cscl[calssid].user[userid].indexOf(pageid) == -1) {
+                    //     us.cscl[calssid].user[userid].push(pageid);
+                    // }
+                    // try {
+                    //     us.offLineMessage[pageid].cscl.indexOf(calssid) == -1 && us.offLineMessage[pageid].cscl.push(calssid); //添加到用户离线消息的连接wrod记录中
+                    // }
+                    // catch (e) {
+
+                    // }
                     _messagearr[j].messageInfo.type = _messagearr[j].type;
                     //生成发送的消息结构体
                     _message = us.message(_messagearr[j].sendId, "us.cscl", _messagearr[j].messageInfo);
@@ -844,50 +880,55 @@ us.updatecscl = function (messageInfo, classId, ty) {
     if (us.cscl[classId]) {
         var i, j, _is;
         var _obj = us.cscl[classId].content;
-        _obj.backgroundUrl = messageInfo.backgroundUrl;
-        _obj.edges = _obj.edges || [];
-        _obj.nodes = _obj.nodes || [];
-        //循环线的处理
-        for (j = 0; j < messageInfo.edges.length; j++) {
-            _is = true;
-            for (i = 0; i < _obj.edges.length; i++) {
-                if (_obj.edges[i].id == messageInfo.edges[j].id) {
-                    //如果是修改线同时先又存在那就直接修改
-                    if (ty == "update") {
-                        _obj.edges[i] = messageInfo.edges[j];
-                    }
-                    //如果是删除线的操作
-                    else {
-                        _obj.edges.splice(i, 1);
+        if (ty == "clean") {
+            _obj = us.cscl[classId].content = {};
+        }
+        else {
+            _obj.backgroundUrl = messageInfo.backgroundUrl;
+            _obj.edges = _obj.edges || [];
+            _obj.nodes = _obj.nodes || [];
+            //循环线的处理
+            for (j = 0; j < messageInfo.edges.length; j++) {
+                _is = true;
+                for (i = 0; i < _obj.edges.length; i++) {
+                    if (_obj.edges[i].id == messageInfo.edges[j].id) {
+                        //如果是修改线同时先又存在那就直接修改
+                        if (ty == "update") {
+                            _obj.edges[i] = messageInfo.edges[j];
+                        }
+                        //如果是删除线的操作
+                        else {
+                            _obj.edges.splice(i, 1);
+                        }
+                        _is = false;
+                        break;
                     }
-                    _is = false;
-                    break;
+                }
+                //修改包含了添加和修改,如果没有修改说明是添加的功能
+                if (_is && ty == "update") {
+                    _obj.edges.push(messageInfo.edges[j])
                 }
             }
-            //修改包含了添加和修改,如果没有修改说明是添加的功能
-            if (_is && ty == "update") {
-                _obj.edges.push(messageInfo.edges[j])
-            }
-        }
-        for (j = 0; j < messageInfo.nodes.length; j++) {
-            _is = true;
-            for (i = 0; i < _obj.nodes.length; i++) {
-                if (_obj.nodes[i].id == messageInfo.nodes[j].id) {
-                    //如果是修改节点
-                    if (ty == "update") {
-                        _obj.nodes[i] = messageInfo.nodes[j];
-                    }
-                    //如果是删除节点
-                    else {
-                        _obj.nodes.splice(i, 1);
+            for (j = 0; j < messageInfo.nodes.length; j++) {
+                _is = true;
+                for (i = 0; i < _obj.nodes.length; i++) {
+                    if (_obj.nodes[i].id == messageInfo.nodes[j].id) {
+                        //如果是修改节点
+                        if (ty == "update") {
+                            _obj.nodes[i] = messageInfo.nodes[j];
+                        }
+                        //如果是删除节点
+                        else {
+                            _obj.nodes.splice(i, 1);
+                        }
+                        _is = false;
+                        break;
                     }
-                    _is = false;
-                    break;
                 }
-            }
-            //修改包含了添加和修改,如果没有修改说明是添加的功能
-            if (_is && ty == "update") {
-                _obj.nodes.push(messageInfo.nodes[j])
+                //修改包含了添加和修改,如果没有修改说明是添加的功能
+                if (_is && ty == "update") {
+                    _obj.nodes.push(messageInfo.nodes[j])
+                }
             }
         }
         //如果不存在则去数据库查找
@@ -1535,12 +1576,14 @@ us.senduser = function (userid, messageinfo) {
 **/
 us.broadcast = function (messageinfo, pageid, type) {
     var i, j, o, //循环变量
+        _data,
         _messageinfo, //消息信息
         _users, //用户ID集合
         _pageids, //用户页面唯一识别集合
         _recievedpageid, //接收用户的页面唯一识别ID
         _issend, // 是否发送
         _userconnect = us.connect; //用户连接池
+    const chunkSize = 100;
     for (i in messageinfo) {
         _messageinfo = messageinfo[i]; //记录消息消息b
         _users = us[type][i] ? us[type][i].user : {}; //记录用户集合
@@ -1552,11 +1595,19 @@ us.broadcast = function (messageinfo, pageid, type) {
                     try {
                         if (_userconnect[j] && _userconnect[j][_recievedpageid]) {
                             console.log(_recievedpageid);
-                            _issend = _userconnect[j][_recievedpageid].response.write(JSON.stringify(_messageinfo) + "\r\n"); //发送消息
+                            _data = JSON.stringify(_messageinfo);
+                            _issend = _userconnect[j][_recievedpageid].response.write(""); //发送消息
                             //用户在轮询切换的时候的中间,会产生数据无法接受,这里是存储数据
                             if (!_issend) {
                                 us.offLineMessage[_recievedpageid].message.push(_messageinfo); //将消息加入用户离线消息中
                             }
+                            else {
+                                for (let i = 0; i < _data.length; i += chunkSize) {
+                                    const chunk = _data.slice(i, i + chunkSize);
+                                    _userconnect[j][_recievedpageid].response.write(chunk);
+                                }
+                                _userconnect[j][_recievedpageid].response.write("\r\n");
+                            }
                         }
                     }
                     catch (e) {
@@ -2174,7 +2225,7 @@ us.getcscl = function (response, calssid, pageid, userid) {
         catch (e) {
 
         }
-        //如果不存在则去数据库查找
+        //后续优化到redis获取
         us.mysql.usselect(['172.16.12.5', 'pbl', 'select_room', calssid],
             function (ret) {
                 var _user = us.getuserbytype(us.cscl[calssid].user); //获取当前项目下所有的用户信息