latte_web_session
Version:
latte_web_session
69 lines (66 loc) • 1.94 kB
text/typescript
import {Store} from "./store"
let RemoveIdle = require("latte_removeidle")
let latte_lib = require("latte_lib")
class MemoryStore implements Store {
opts: any;
sessions: any;
removeIdle: any;
constructor(opts) {
let self = this;
this.removeIdle = new RemoveIdle({
destroy: function(object) {
if(self.sessions[object]) {
console.log('delete', object);
delete self.sessions[object];
self.save();
}
},
idleTimeoutMillis: opts.timeout || 1000 * 10
});
this.opts = opts || {};
this.opts.path = this.opts.path || ".session.latte";
this.load();
for(let i in this.sessions) {
this.removeIdle.release(i);
}
};
get(key:string, callback) {
let value = this.sessions[key];
if(value) {
this.removeIdle.getIdle(key);
}
callback && callback(null, value);
};
set(key:string,value:any, callback) {
this.sessions[key] = value;
this.removeIdle.release(key);
this.save();
callback && callback(null, 1);
};
del(key:string, callback) {
let value = this.sessions[key];
this.removeIdle.getIdle(key);
delete this.sessions[key];
this.save();
callback && callback();
}
load() {
let result = latte_lib.fs.existsSync(this.opts.path);
if(!result) {
this.sessions = {};
return;
}
let data = latte_lib.fs.readFileSync(this.opts.path);
try {
this.sessions = JSON.parse(data);
}catch(err) {
this.sessions = {};
}
}
save() {
latte_lib.fs.writeFileSync(this.opts.path,JSON.stringify(this.sessions));
}
};
export function create(opts) {
return new MemoryStore(opts);
}