| var events = require('events') |
| var util = require('util') |
| var fs = require('fs') |
| |
| var uuid = require('node-uuid') |
| |
| function Storage() { |
| events.EventEmitter.call(this) |
| this.files = Object.create(null) |
| this.timer = setInterval(this.check.bind(this), 60000) |
| } |
| |
| util.inherits(Storage, events.EventEmitter) |
| |
| Storage.prototype.store = function(file) { |
| var id = uuid.v4() |
| this.set(id, file) |
| return id |
| } |
| |
| Storage.prototype.set = function(id, file) { |
| this.files[id] = { |
| timeout: 600000 |
| , lastActivity: Date.now() |
| , data: file |
| } |
| |
| return file |
| } |
| |
| Storage.prototype.remove = function(id) { |
| var file = this.files[id] |
| if (file) { |
| delete this.files[id] |
| fs.unlink(file.data.path, function() {}) |
| } |
| } |
| |
| Storage.prototype.retrieve = function(id) { |
| var file = this.files[id] |
| if (file) { |
| file.lastActivity = Date.now() |
| return file.data |
| } |
| return null |
| } |
| |
| Storage.prototype.check = function() { |
| var now = Date.now() |
| |
| Object.keys(this.files).forEach(function(id) { |
| var file = this.files[id] |
| var inactivePeriod = now - file.lastActivity |
| |
| if (inactivePeriod >= file.timeout) { |
| this.remove(id) |
| this.emit('timeout', id, file.data) |
| } |
| }, this) |
| } |
| |
| Storage.prototype.stop = function() { |
| clearInterval(this.timer) |
| } |
| |
| module.exports = Storage |