|
@@ -5,6 +5,11 @@ us.qs = require("querystring"); //引用文件解析包
|
|
|
us.http = require("http"); //引用http server服务
|
|
|
us.mysql = require("./mysql.js"); //引用执行存储过程包
|
|
|
|
|
|
+/**
|
|
|
+* 保持知识建构的时间变量
|
|
|
+**/
|
|
|
+us.savecscltime = null;
|
|
|
+
|
|
|
/**
|
|
|
* 用户的链接池集合,以用户id作为搜索键
|
|
|
**/
|
|
@@ -84,6 +89,21 @@ us.nav = {
|
|
|
//} //导航文档数据结构
|
|
|
}
|
|
|
|
|
|
+//知识建构的数据结构
|
|
|
+us.cscldata = function () {
|
|
|
+ return {
|
|
|
+ id: "",
|
|
|
+ userid: "",
|
|
|
+ name: "",
|
|
|
+ num: "",
|
|
|
+ data: "",
|
|
|
+ isClose: "",
|
|
|
+ create_at: "",
|
|
|
+ createuser: "",
|
|
|
+ smailheadportrait: ""
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 用户链接类
|
|
|
*
|
|
@@ -235,6 +255,9 @@ us.server = us.http.createServer(function (requset, response) {
|
|
|
case 'quitOffice':
|
|
|
us.quitOffice(response, _param[0]);
|
|
|
break;
|
|
|
+ case 'quitcscl':
|
|
|
+ us.quitcscl(response, _param[0]);
|
|
|
+ break;
|
|
|
case 'newWordSave':
|
|
|
us.newWordSave(response, _param[0], _param[1], _param[2], _param[3], _param[4]);
|
|
|
break;
|
|
@@ -393,6 +416,7 @@ us.addUser = function (response, type, fileid, userids, userid, pageid) {
|
|
|
**/
|
|
|
us.getuserbytype = function (userids) {
|
|
|
var _userinfo = [];
|
|
|
+ //console.log(us.user);
|
|
|
for (var i in userids) {
|
|
|
if (us.user[i]) {
|
|
|
_userinfo.push(us.user[i])
|
|
@@ -474,10 +498,10 @@ us.unifyDispose = function (req, res, cb) {
|
|
|
});
|
|
|
|
|
|
//设置30秒后超时
|
|
|
- res.setTimeout(30000, function () {
|
|
|
+ res.setTimeout(60000, function () {
|
|
|
try {
|
|
|
//console.log("响应超时.");
|
|
|
- //res.end("false"); //返回值
|
|
|
+ res.end(""); //返回值
|
|
|
}
|
|
|
catch (e) {
|
|
|
console.error('process error is:', e.message);
|
|
@@ -488,7 +512,6 @@ us.unifyDispose = function (req, res, cb) {
|
|
|
req.on("error", function (e) {
|
|
|
try {
|
|
|
console.log(e);
|
|
|
- //res.end("false");
|
|
|
}
|
|
|
catch (e) {
|
|
|
console.error('process error is:', e.message);
|
|
@@ -520,79 +543,92 @@ 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) {
|
|
|
- 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];
|
|
|
+us.deluser = function (userid, pageid) {
|
|
|
+ if (pageid && us.offLineMessage[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("1111111111111")
|
|
|
+ console.log(_csclids)
|
|
|
+ console.log(pageid)
|
|
|
+ console.log(us.offLineMessage[pageid])
|
|
|
+ //删除用户离校消息记录
|
|
|
+ delete us.offLineMessage[pageid];
|
|
|
+ //知识架构的下线的处理
|
|
|
+ for (i = 0; i < _csclids.length; i++) { //循环处理每一个文档
|
|
|
+ _docinfo = us.cscl[_csclids[i]]; //记录文档信息
|
|
|
+ if (_docinfo) { //如果存在文档信息
|
|
|
+ _fileid = _csclids[i];
|
|
|
+ _userid = us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- console.log("1111111111111")
|
|
|
- console.log(_csclids)
|
|
|
- //知识架构的下线的处理
|
|
|
- for (i = 0; i < _csclids.length; i++) { //循环处理每一个文档
|
|
|
- _docinfo = us.cscl[_csclids[i]]; //记录文档信息
|
|
|
- if (_docinfo) { //如果存在文档信息
|
|
|
- _fileid = _csclids[i];
|
|
|
- _userid = us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
+ console.log(_userid)
|
|
|
+ //下线后通知所有的用户
|
|
|
+ if (_userid) {
|
|
|
+ _message = {};
|
|
|
+ var _messageinfo = us.message(userid, 'us.cscl', {
|
|
|
+ id: us.createGuid(),
|
|
|
+ type: "delUser",
|
|
|
+ userinfo: us.user[_userid],
|
|
|
+ docId: _fileid
|
|
|
+ });
|
|
|
+ _message[_fileid] = [_messageinfo];
|
|
|
+ console.log(_message)
|
|
|
+ us.broadcast(_message, pageid, "cscl");
|
|
|
}
|
|
|
}
|
|
|
- console.log(_userid)
|
|
|
- //下线后通知所有的用户
|
|
|
- if (_userid) {
|
|
|
- _message = {};
|
|
|
- var _messageinfo = us.message(userid, 'us.cscl', {
|
|
|
- id: us.createGuid(),
|
|
|
- type: "delUser",
|
|
|
- userid: _userid,
|
|
|
- docId: _fileid
|
|
|
- });
|
|
|
- _message[_fileid] = [_messageinfo];
|
|
|
- console.log(_message)
|
|
|
- us.broadcast(_message, pageid, "cscl");
|
|
|
- }
|
|
|
+ //其他应用的处理
|
|
|
+ // //word的下线的处理
|
|
|
+ // for (i = 0; i < _wordids.length; i++) { //循环处理每一个文档
|
|
|
+ // _docinfo = us.word[_wordids[i]]; //记录文档信息
|
|
|
+ // if (_docinfo) { //如果存在文档信息
|
|
|
+ // us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
+ // us.insertHistory(_docinfo, 'word'); //插入历史
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // //excel的下线的处理
|
|
|
+ // for (j = 0; i < _excelids.length; j++) {
|
|
|
+ // _docinfo = us.excel[_excelids[j]]; //记录文档信息
|
|
|
+ // if (_docinfo) { //如果存在文档信息
|
|
|
+ // us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
+ // us.insertHistory(_docinfo, 'excel'); //插入历史
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+}
|
|
|
|
|
|
- //word的下线的处理
|
|
|
- for (i = 0; i < _wordids.length; i++) { //循环处理每一个文档
|
|
|
- _docinfo = us.word[_wordids[i]]; //记录文档信息
|
|
|
- if (_docinfo) { //如果存在文档信息
|
|
|
- us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
- us.insertHistory(_docinfo, 'word'); //插入历史
|
|
|
+/**
|
|
|
+* 用户下线,用计时器实时的监控用户是否在线
|
|
|
+*/
|
|
|
+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.connection == null || _user[j].response.connection.destroyed) {
|
|
|
+ console.log("================2===============");
|
|
|
+ console.log(i);
|
|
|
+ console.log(j);
|
|
|
+ us.deluser(i, j); //删除用户的数据
|
|
|
+ delete _user[j]
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- //excel的下线的处理
|
|
|
- for (j = 0; i < _excelids.length; j++) {
|
|
|
- _docinfo = us.excel[_excelids[j]]; //记录文档信息
|
|
|
- if (_docinfo) { //如果存在文档信息
|
|
|
- us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
- us.insertHistory(_docinfo, 'excel'); //插入历史
|
|
|
+ for (j in _user) { istrue = false; break }
|
|
|
+ //这个用户下所有的连接用户都不在了
|
|
|
+ if (istrue) {
|
|
|
+ //用户登录数据清理,用于已经下线
|
|
|
+ delete us.user[i];
|
|
|
+ delete us.connect[i];
|
|
|
}
|
|
|
+ istrue = true;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -604,36 +640,51 @@ 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] //用户离校消息
|
|
|
+ var _data,
|
|
|
+ _userarray = us.connect[userid], //用户连接池,获取制定用户连接的数量,
|
|
|
+ _messagearray = us.offLineMessage[pageid] //用户离线信息
|
|
|
;
|
|
|
+ const chunkSize = 100;
|
|
|
//获取当前连接的用户,如果获取成功那么直接修改用户的连接
|
|
|
if (_userarray[pageid]) {
|
|
|
+ //防止重复多连
|
|
|
+ try {
|
|
|
+ _userarray[pageid].response.end("");
|
|
|
+ }
|
|
|
+ catch (e) {
|
|
|
+
|
|
|
+ }
|
|
|
_userarray[pageid].response = response;
|
|
|
if (_messagearray && _messagearray.message.length > 0) {
|
|
|
- response.write(JSON.stringify(_messagearray.message));
|
|
|
+ _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 {
|
|
|
- us.offLineMessage[pageid] = us.userOffLineMessage(type); //初始化用户离线消息记录
|
|
|
+ us.offLineMessage[pageid] = us.offLineMessage[pageid] || us.userOffLineMessage(type); //初始化用户离线消息记录
|
|
|
}
|
|
|
- return;
|
|
|
}
|
|
|
- //如果用户连接不存在
|
|
|
- _userarray[pageid] = us.userConnect(pageid, response); //那么直接添加用户连接 添加到用户连接数组里
|
|
|
- us.offLineMessage[pageid] = us.userOffLineMessage(type); //初始化用户离线消息记录
|
|
|
+ else {
|
|
|
+ //如果用户连接不存在
|
|
|
+ _userarray[pageid] = us.userConnect(pageid, response); //那么直接添加用户连接 添加到用户连接数组里
|
|
|
+ us.offLineMessage[pageid] = us.userOffLineMessage(type); //初始化用户离线消息记录
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
var _userconect = us.userConnect(pageid, response); //创建用户连接对象
|
|
|
us.connect[userid] = {}; //添加用户连接对象
|
|
|
us.connect[userid][pageid] = _userconect;
|
|
|
- us.offLineMessage[pageid] = us.userOffLineMessage(type); //初始化用户离线消息记录
|
|
|
+ us.offLineMessage[pageid] = us.offLineMessage[pageid] || us.userOffLineMessage(type); //初始化用户离线消息记录
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -675,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);
|
|
@@ -812,68 +877,71 @@ us.updatemindNetwork = function (messageInfo) {
|
|
|
* @param {object} message 消息信息
|
|
|
*/
|
|
|
us.updatecscl = function (messageInfo, classId, ty) {
|
|
|
- //messageInfo = messageInfo;
|
|
|
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 || [];
|
|
|
- // console.log("------------s------------");
|
|
|
- // console.log(messageInfo);
|
|
|
- // console.log(_obj);
|
|
|
- // console.log(ty);
|
|
|
- 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])
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- console.log(_obj);
|
|
|
//如果不存在则去数据库查找
|
|
|
- us.mysql.usselect(['172.16.12.5', 'pbl', 'updateRoomData', JSON.stringify(_obj), classId],
|
|
|
- function (ret) {
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- //"nodes":[{"id":"9f6d7459-d376-4c0c-944b-a6b140085903","type":"icon-start","x":625,"y":145,"properties":{},"zIndex":1002,"text":{"x":625,"y":145,"value":"起始"}},{"id":"16e18308-7517-4162-8b32-a877b7cf42a0","type":"icon-card","x":325,"y":445,"properties":{},"zIndex":1002},{"id":"5c492b0d-092d-4d84-bd70-4d5734de9266","type":"icon-select","x":970,"y":510,"properties":{},"zIndex":1002}],
|
|
|
- //"edges":[],
|
|
|
- //"backgroundUrl":"img/bg.ccee1c62.png"
|
|
|
-
|
|
|
+ try {
|
|
|
+ clearTimeout(us.savecscltime);
|
|
|
+ }
|
|
|
+ catch (e) {
|
|
|
|
|
|
- // if (_obj) {
|
|
|
- // _obj[messageInfo.id] = messageInfo.content;
|
|
|
- // }
|
|
|
+ }
|
|
|
+ //每次修改每隔五秒保存一次数据,防止数据操作频繁导致数据库太卡
|
|
|
+ us.savecscltime = setTimeout(function () {
|
|
|
+ us.mysql.usselect(['172.16.12.5', 'pbl', 'updateRoomData', JSON.stringify(_obj), classId], function (ret) { });
|
|
|
+ }, 5000)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1508,14 +1576,16 @@ 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]; //记录消息消息
|
|
|
+ _messageinfo = messageinfo[i]; //记录消息消息b
|
|
|
_users = us[type][i] ? us[type][i].user : {}; //记录用户集合
|
|
|
for (j in _users) { //循环处理每个用户处理 给每个用户集合下的用户发送消息
|
|
|
_pageids = _users[j]; //记录当前用户在每个端登录的页面唯一识别ID
|
|
@@ -1525,10 +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)); //发送消息
|
|
|
- if (!_issend) { //如果用户下线了,那么发送消息就会失败
|
|
|
+ _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) {
|
|
@@ -1581,7 +1660,7 @@ us.addWord = function (response, wordinfo) {
|
|
|
* @param {string} wordinfo 文档信息
|
|
|
**/
|
|
|
us.quitOffice = function (response, wordinfo) {
|
|
|
- //获取用户参数
|
|
|
+ //获取用户参数
|
|
|
wordinfo = JSON.parse(wordinfo);
|
|
|
var _docid = wordinfo.docId,
|
|
|
_userid = wordinfo.userId,
|
|
@@ -1605,15 +1684,60 @@ us.quitOffice = function (response, wordinfo) {
|
|
|
response.end('quitOffice'); //响应退出请求
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+* 退出知识建构
|
|
|
+*
|
|
|
+* @param {object} response 用户相应对象
|
|
|
+* @param {string} wordinfo 文档信息
|
|
|
+**/
|
|
|
+us.quitcscl = function (response, info) {
|
|
|
+ console.log(info)
|
|
|
+ //获取用户参数
|
|
|
+ info = JSON.parse(info);
|
|
|
+ var _docid = info.docId,
|
|
|
+ _userid = info.userId,
|
|
|
+ _pageid = info.pageId,
|
|
|
+ _type = info.type;
|
|
|
+ var _docinfo = us[_type][_docid]; //获取文档信息
|
|
|
+ //判断是否存在文档信息
|
|
|
+ if (_docinfo) {
|
|
|
+ _userid = us.quitUserList(_docinfo, _userid, _pageid); //将用户在协同列表中删除
|
|
|
+ console.log(_userid)
|
|
|
+ //下线后通知所有的用户
|
|
|
+ if (_userid) {
|
|
|
+ _message = {};
|
|
|
+ var _messageinfo = us.message(_userid, 'us.cscl', {
|
|
|
+ id: us.createGuid(),
|
|
|
+ type: "delUser",
|
|
|
+ userinfo: us.user[_userid],
|
|
|
+ docId: _docid
|
|
|
+ });
|
|
|
+ _message[_docid] = [_messageinfo];
|
|
|
+ console.log(_message)
|
|
|
+ us.broadcast(_message, _pageid, "cscl");
|
|
|
+ }
|
|
|
+
|
|
|
+ // var _j, //创建循环变量
|
|
|
+ // _message = us.offLineMessage[_pageid] ? us.offLineMessage[_pageid].message : []; //获取该用户的离线消息
|
|
|
+ // for (_j = _message.length - 1; _j > -1; _j--) { //循环移除该文档的离线消息
|
|
|
+ // if (_message[_j].type == _messagetype && _message[_j].messageInfo.docId == _docid) { //判断是否为word文档
|
|
|
+ // _message.splice(_j, 1); //删除记录
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ response.end('quitcscl'); //响应退出请求
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 将用户在协同列表中删除
|
|
|
-*
|
|
|
+*
|
|
|
* @param {object} docinfo 文档信息
|
|
|
* @param {string} userid 用户ID
|
|
|
* @param {string} pageid 用户页面唯一识别ID
|
|
|
*/
|
|
|
us.quitUserList = function (docinfo, userid, pageid) {
|
|
|
var _users = docinfo.user[userid]; //记录文档的用户列表
|
|
|
+ console.log(_users)
|
|
|
//获取用户在文档用户列表的位置
|
|
|
if (_users) {
|
|
|
var _index = _users.indexOf(pageid);
|
|
@@ -1673,31 +1797,47 @@ us.insertHistory = function (docinfo, docid, type) {
|
|
|
* @param {string} pageid 用户页面唯一识别ID
|
|
|
*/
|
|
|
us.logout = function (response, userid, pageid) {
|
|
|
- var i, j, _docinfo,
|
|
|
- _wordids = us.offLineMessage[pageid].word, //得到加入的所有word
|
|
|
- _excelids = us.offLineMessage[pageid].excel; //得到加入的所有excel
|
|
|
+ console.log("234566666666666666")
|
|
|
+ console.log(userid)
|
|
|
+ var j, istrue = true;
|
|
|
+ var _user = us.connect[userid];
|
|
|
+ //循环目前所有的连接用户
|
|
|
+ us.deluser(userid, pageid); //删除用户的数据
|
|
|
+ delete _user[pageid]
|
|
|
+ for (j in _user) { istrue = false; break }
|
|
|
+ //这个用户下所有的连接用户都不在了
|
|
|
+ if (istrue) {
|
|
|
+ //用户登录数据清理,用于已经下线
|
|
|
+ delete us.user[userid];
|
|
|
+ delete us.connect[userid];
|
|
|
+ }
|
|
|
+ console.log(pageid)
|
|
|
+ response.end('logout'); //响应退出请求
|
|
|
|
|
|
- us.connect[userid][pageid].offLineTime = new Date();
|
|
|
+ // var i, j, _docinfo,
|
|
|
+ // _wordids = us.offLineMessage[pageid].word, //得到加入的所有word
|
|
|
+ // _excelids = us.offLineMessage[pageid].excel; //得到加入的所有excel
|
|
|
|
|
|
- for (i = 0; i < _wordids.length; i++) { //循环处理每一个文档
|
|
|
- _docinfo = us.word[_wordids[i]]; //记录文档信息
|
|
|
- if (_docinfo) { //如果存在文档信息
|
|
|
- us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
- delete us.offLineMessage[pageid]; //删除用户离线消息记录
|
|
|
- us.insertHistory(_docinfo, 'word'); //插入历史
|
|
|
- }
|
|
|
- }
|
|
|
+ // us.connect[userid][pageid].offLineTime = new Date();
|
|
|
|
|
|
- for (j = 0; i < _excelids.length; j++) {
|
|
|
- _docinfo = us.excel[_excelids[j]]; //记录文档信息
|
|
|
- if (_docinfo) { //如果存在文档信息
|
|
|
- us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
- delete us.offLineMessage[pageid]; //删除用户离线消息记录
|
|
|
- us.insertHistory(_docinfo, 'excel'); //插入历史
|
|
|
- }
|
|
|
- }
|
|
|
+ // for (i = 0; i < _wordids.length; i++) { //循环处理每一个文档
|
|
|
+ // _docinfo = us.word[_wordids[i]]; //记录文档信息
|
|
|
+ // if (_docinfo) { //如果存在文档信息
|
|
|
+ // us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
+ // delete us.offLineMessage[pageid]; //删除用户离线消息记录
|
|
|
+ // us.insertHistory(_docinfo, 'word'); //插入历史
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // for (j = 0; i < _excelids.length; j++) {
|
|
|
+ // _docinfo = us.excel[_excelids[j]]; //记录文档信息
|
|
|
+ // if (_docinfo) { //如果存在文档信息
|
|
|
+ // us.quitUserList(_docinfo, userid, pageid); //将用户在协同列表中删除
|
|
|
+ // delete us.offLineMessage[pageid]; //删除用户离线消息记录
|
|
|
+ // us.insertHistory(_docinfo, 'excel'); //插入历史
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
- response.end('logout'); //响应退出请求
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2085,20 +2225,17 @@ 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); //获取当前项目下所有的用户信息
|
|
|
var _data = us.cscl[calssid].content; //保存在内存的知识建构数据
|
|
|
if (ret) {
|
|
|
- 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)
|
|
|
response.end(JSON.stringify(ret)); //返回文档内容
|
|
|
}
|
|
|
else {
|
|
@@ -2120,11 +2257,13 @@ 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]);
|
|
|
ret[0][0].user = _user; //这里是项目当前所有用户
|
|
|
- us.cscl[calssid].content = JSON.parse(ret[0][0].data); //把思维网格的内容转化成数组
|
|
|
- //us.sendUser(us.user[userid], "cscl", pageid, calssid); //加入知识建构项目后通知所有的用户
|
|
|
+ try {
|
|
|
+ us.cscl[calssid].content = JSON.parse(ret[0][0].data); //把思维网格的内容转化成数组
|
|
|
+ }
|
|
|
+ catch (e) {
|
|
|
+ us.cscl[calssid].content = ret[0][0].data;
|
|
|
+ }
|
|
|
response.end(JSON.stringify(ret)); //返回文档内容
|
|
|
}
|
|
|
else {
|
|
@@ -2434,6 +2573,8 @@ us.createGuid = function () {
|
|
|
*
|
|
|
**/
|
|
|
us.server.listen('1473', '', function () {
|
|
|
+ //用户下线监控
|
|
|
+ setInterval(function () { us.offLine() }, 10000);
|
|
|
//在控制台输出监听提示
|
|
|
console.log("开始监听" + us.server.address().port + "......");
|
|
|
});
|