sumeru
Version:
A Realtime Javascript RIA Framework For Mobile WebApp
72 lines (59 loc) • 1.54 kB
JavaScript
/**
* snapshot管理器
* redo subscribe时,查看snapshots里是否有版本信息。
* huangxin03
*/
var o = require(__dirname + '/ObjectId.js');
var ENABLE = true;
var DEFAULT_CAPACITY = 60;
var MAX_CAPACITY = 600;
var totalSnapshots = 0;
var snapshotMgr = {};
function SnapshotMgr(pubname, capacity){
this.pubname = pubname;
this.capacity = capacity;
this.snapshot = [];
this.versionMap = [];
}
SnapshotMgr.prototype = {
add : function(pubname, data){
if(this.snapshot.length >= this.capacity || totalSnapshots === MAX_CAPACITY){
this.remove();
}
var version = o.ObjectId();
this.versionMap.push(version);
this.snapshot.push(data);
totalSnapshots++;
return version;
},
remove : function(pubname){
if(this.versionMap.length){
this.versionMap.shift();
this.snapshot.shift();
totalSnapshots--;
}
},
get : function(pubname, version){
var index = this.versionMap.indexOf(version);
if(index >=0){
return this.snapshot[index];
}
return false;
}
}
//snapshotMgr是SnapshotMgr instance的容器
snapshotMgr.get = function(pubname, version){
if(!ENABLE){ return false;}
if(!snapshotMgr[pubname]){
return false;
}
return snapshotMgr[pubname].get(pubname, version);
}
snapshotMgr.add = function(pubname, data){
if(!ENABLE){ return 0;}
snapshotMgr[pubname] = snapshotMgr[pubname] || new SnapshotMgr(pubname, DEFAULT_CAPACITY);
return snapshotMgr[pubname].add(pubname, data);
}
if(typeof module !='undefined' && module.exports){
module.exports = snapshotMgr;
}