bitcore-wallet-service/lib/lock.js

44 lines
1.1 KiB
JavaScript
Raw Normal View History

2015-04-03 11:43:22 -07:00
var $ = require('preconditions').singleton();
2015-04-07 13:02:08 -07:00
var _ = require('lodash');
2015-04-08 11:02:33 -07:00
var log = require('npmlog');
log.debug = log.verbose;
2015-04-18 02:55:24 -07:00
log.disableColor();
2015-04-08 11:02:33 -07:00
2015-04-07 13:02:08 -07:00
var LocalLock = require('./locallock');
var RemoteLock = require('locker');
2015-01-27 05:18:45 -08:00
var Errors = require('./errors/errordefinitions');
2015-04-08 06:21:01 -07:00
function Lock(opts) {
2015-04-08 11:02:33 -07:00
opts = opts || {};
if (opts.lockerServer) {
this.lock = new RemoteLock(opts.lockerServer.port, opts.lockerServer.host);
2015-04-29 10:35:07 -07:00
log.info('Using locker server:' + opts.lockerServer.host + ':' + opts.lockerServer.port);
2015-04-15 06:59:25 -07:00
2015-04-08 11:02:33 -07:00
this.lock.on('reset', function() {
log.debug('Locker server reset');
});
this.lock.on('error', function(error) {
log.error('Locker server threw error', error);
});
} else {
this.lock = new LocalLock();
}
2015-04-08 06:21:01 -07:00
};
2015-01-27 05:18:45 -08:00
2015-04-07 13:02:08 -07:00
Lock.prototype.runLocked = function(token, cb, task) {
$.shouldBeDefined(token);
2015-01-27 05:18:45 -08:00
this.lock.locked(token, 5 * 1000, 5 * 60 * 1000, function(err, release) {
2017-11-01 07:43:47 -07:00
if (err) return cb(Errors.WALLET_BUSY);
2015-04-07 13:02:08 -07:00
var _cb = function() {
cb.apply(null, arguments);
2015-04-08 06:21:01 -07:00
release();
2015-04-07 13:02:08 -07:00
};
task(_cb);
});
2015-01-27 05:18:45 -08:00
};
module.exports = Lock;