2014-09-23 17:03:44 +04:00
|
|
|
|
var session = {
|
|
|
|
|
init: function () {
|
|
|
|
|
this._initWS();
|
|
|
|
|
|
|
|
|
|
// 定时(30 秒)保存会话内容.
|
|
|
|
|
setInterval(function () {
|
|
|
|
|
var request = newWideRequest(),
|
|
|
|
|
filse = [],
|
|
|
|
|
fileTree = [],
|
|
|
|
|
currentFile = "";
|
|
|
|
|
|
|
|
|
|
editors.tabs.obj._$tabs.find("div").each(function () {
|
|
|
|
|
var $it = $(this);
|
|
|
|
|
if ($it.hasClass("current")) {
|
|
|
|
|
currentFile = $it.find("span:eq(0)").attr("title");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
filse.push($it.find("span:eq(0)").attr("title"));
|
|
|
|
|
});
|
2014-09-23 18:29:53 +04:00
|
|
|
|
|
2014-09-23 17:03:44 +04:00
|
|
|
|
fileTree = tree.getOpenPaths();
|
|
|
|
|
|
|
|
|
|
request.currentFile = currentFile; // 当前编辑器
|
|
|
|
|
request.fileTree = fileTree; // 文件树展开状态
|
|
|
|
|
request.files = filse; // 编辑器打开状态
|
|
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
|
type: 'POST',
|
|
|
|
|
url: '/session/save',
|
|
|
|
|
data: JSON.stringify(request),
|
|
|
|
|
dataType: "json",
|
|
|
|
|
success: function (data) {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}, 5000);
|
|
|
|
|
},
|
2014-09-23 18:29:53 +04:00
|
|
|
|
restore: function () {
|
2014-09-24 07:00:33 +04:00
|
|
|
|
var fileTree = config.latestSessionContent.fileTree,
|
|
|
|
|
files = config.latestSessionContent.files,
|
|
|
|
|
currentFile = config.latestSessionContent.currentFile,
|
2014-09-23 18:29:53 +04:00
|
|
|
|
id = "",
|
|
|
|
|
nodesToOpen = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());
|
|
|
|
|
|
|
|
|
|
for (var i = 0, ii = nodes.length; i < ii; i++) {
|
|
|
|
|
// expand tree
|
|
|
|
|
for (var j = 0, jj = fileTree.length; j < jj; j++) {
|
|
|
|
|
if (nodes[i].path === fileTree[j]) {
|
|
|
|
|
tree.fileTree.expandNode(nodes[i], true, false, false);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// open editors
|
|
|
|
|
for (var k = 0, kk = files.length; k < kk; k++) {
|
|
|
|
|
if (nodes[i].path === files[k]) {
|
|
|
|
|
nodesToOpen.push(nodes[i]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (nodes[i].path === currentFile) {
|
|
|
|
|
id = nodes[i].tId;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理编辑器打开顺序
|
|
|
|
|
for (var m = 0, mm = files.length; m < mm; m++) {
|
|
|
|
|
for (var n = 0, nn = nodesToOpen.length; n < nn; n++) {
|
|
|
|
|
if (nodesToOpen[n].path === files[m]) {
|
|
|
|
|
tree._onClick(nodesToOpen[n]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
editors.tabs.setCurrent(id);
|
|
|
|
|
},
|
2014-09-23 17:03:44 +04:00
|
|
|
|
_initWS: function () {
|
|
|
|
|
// 用于保持会话,如果该通道断开,则服务器端会销毁会话状态,回收相关资源.
|
|
|
|
|
var sessionWS = new WebSocket(config.channel.session + '/session/ws?sid=' + config.wideSessionId);
|
|
|
|
|
|
|
|
|
|
sessionWS.onopen = function () {
|
|
|
|
|
console.log('[session onopen] connected');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
sessionWS.onmessage = function (e) {
|
|
|
|
|
console.log('[session onmessage]' + e.data);
|
|
|
|
|
var data = JSON.parse(e.data);
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
sessionWS.onclose = function (e) {
|
|
|
|
|
console.log('[session onclose] disconnected (' + e.code + ')');
|
|
|
|
|
delete sessionWS;
|
|
|
|
|
};
|
|
|
|
|
sessionWS.onerror = function (e) {
|
|
|
|
|
console.log('[session onerror] ' + JSON.parse(e));
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|