|
@@ -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); //获取当前项目下所有的用户信息
|