More refactoring on Trader

This commit is contained in:
Maciej Małecki 2014-04-14 15:16:53 +02:00
parent 05fef31fce
commit 1f3c59dbc0
6 changed files with 88 additions and 277 deletions

View file

@ -1,6 +1,8 @@
'use strict';
var path = require('path');
var async = require('async');
var winston = require('winston');
var SATOSHI_FACTOR = Math.pow(10, 8);
@ -10,6 +12,7 @@ var Trader = module.exports = function (db) {
}
this.db = db;
this.rates = {};
this.logger = new (winston.Logger)({
transports: [new (winston.transports.Console)()]
});
@ -29,38 +32,38 @@ Trader.prototype._findExchange = function (name) {
};
Trader.prototype._findTicker = function (name) {
var exchange = Trader.prototype.findExchange(name);
var exchange = Trader.prototype._findExchange(name);
return exchange.ticker || exchange;
};
Trader.prototype._findTrader = function (name) {
var exchange = Trader.prototype.findExchange(name);
var exchange = Trader.prototype._findExchange(name);
return exchange.trader || exchange;
};
Trader.prototype._findWallet = function (name) {
var exchange = Trader.prototype.findExchange(name);
var exchange = Trader.prototype._findExchange(name);
return exchange.wallet || exchange;
};
Trader.prototype.configure = function (config) {
if (config.settings.lowBalanceMargin < 1) {
if (config.exchanges.settings.lowBalanceMargin < 1) {
throw new Error('`settings.lowBalanceMargin` has to be >= 1');
}
var tickerExchangeCode = config.plugins.current.ticker;
var tickerExchangeConfig = config.plugins.settings[tickerExchangeCode] || {};
tickerExchangeConfig.currency = config.settings.currency;
this.tickerExchange = exports.findTicker(tickerExchangeCode).factory(tickerExchangeConfig);
var tickerExchangeCode = config.exchanges.plugins.current.ticker;
var tickerExchangeConfig = config.exchanges.plugins.settings[tickerExchangeCode] || {};
tickerExchangeConfig.currency = config.exchanges.settings.currency;
this.tickerExchange = this._findTicker(tickerExchangeCode).factory(tickerExchangeConfig);
var tradeExchangeCode = config.plugins.current.trade;
var tradeExchangeCode = config.exchanges.plugins.current.trade;
if (tradeExchangeCode) {
var tradeExchangeConfig = config.plugins.settings[tradeExchangeCode];
var tradeExchangeConfig = config.exchanges.plugins.settings[tradeExchangeCode];
this.tradeExchange = this._findTrader(tradeExchangeCode).factory(tradeExchangeConfig);
}
var transferExchangeCode = config.plugins.current.transfer;
var transferExchangeConfig = config.plugins.settings[transferExchangeCode];
var transferExchangeCode = config.exchanges.plugins.current.transfer;
var transferExchangeConfig = config.exchanges.plugins.settings[transferExchangeCode];
this.transferExchange = this._findWallet(transferExchangeCode).factory(transferExchangeConfig);
this.config = config;
@ -154,7 +157,11 @@ Trader.prototype.sendBitcoins = function (deviceFingerprint, tx, cb) {
};
Trader.prototype.startPolling = function () {
this.pollBalance();
this.pollRate();
setInterval(this.pollBalance.bind(this), 60 * 1000);
setInterval(this.pollRate.bind(this), 60 * 1000);
};
Trader.prototype.pollBalance = function () {
@ -177,3 +184,19 @@ Trader.prototype.pollBalance = function () {
self.balance = balance;
});
};
Trader.prototype.pollRate = function () {
var self = this;
var currency = self.config.exchanges.settings.currency;
self.logger.info('polling for rate...');
self.tickerExchange.ticker(currency, function(err, rate) {
if (err) return;
self.logger.info('Rate update:', rate);
self.rates[currency] = {rate: rate, timestamp: new Date()};
});
};
Trader.prototype.rate = function (currency) {
return this.rates[currency];
};