mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
105 lines
2.7 KiB
JavaScript
105 lines
2.7 KiB
JavaScript
// Routines for working with an orderbook.
|
|
//
|
|
// Events:
|
|
|
|
// var network = require("./network.js");
|
|
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var Amount = require('./amount').Amount;
|
|
var UInt160 = require('./uint160').UInt160;
|
|
var Currency = require('./currency').Currency;
|
|
|
|
var extend = require('extend');
|
|
|
|
var OrderBook = function (remote,
|
|
currency_out, issuer_out,
|
|
currency_in, issuer_in) {
|
|
var self = this;
|
|
|
|
this._remote = remote;
|
|
this._currency_out = currency_out;
|
|
this._issuer_out = issuer_out;
|
|
this._currency_in = currency_in;
|
|
this._issuer_in = issuer_in;
|
|
|
|
this._subs = 0;
|
|
|
|
// Ledger entry object
|
|
// Important: This must never be overwritten, only extend()-ed
|
|
this._entry = {};
|
|
|
|
this.on('newListener', function (type, listener) {
|
|
if (OrderBook.subscribe_events.indexOf(type) !== -1) {
|
|
if (!self._subs && 'open' === self._remote._online_state) {
|
|
self._remote.request_subscribe()
|
|
.books([self.to_json()])
|
|
.request();
|
|
}
|
|
self._subs += 1;
|
|
}
|
|
});
|
|
|
|
this.on('removeListener', function (type, listener) {
|
|
if (OrderBook.subscribe_events.indexOf(type) !== -1) {
|
|
self._subs -= 1;
|
|
|
|
if (!self._subs && 'open' === self._remote._online_state) {
|
|
self._remote.request_unsubscribe()
|
|
.books([self.to_json()])
|
|
.request();
|
|
}
|
|
}
|
|
});
|
|
|
|
this._remote.on('connect', function () {
|
|
if (self._subs) {
|
|
self._remote.request_subscribe()
|
|
.books([self.to_json()])
|
|
.request();
|
|
}
|
|
});
|
|
|
|
return this;
|
|
};
|
|
|
|
OrderBook.prototype = new EventEmitter;
|
|
|
|
/**
|
|
* List of events that require a remote subscription to the orderbook.
|
|
*/
|
|
OrderBook.subscribe_events = ['transaction'];
|
|
|
|
OrderBook.prototype.to_json = function ()
|
|
{
|
|
var json = {
|
|
"CurrencyOut": this._currency_out,
|
|
"CurrencyIn": this._currency_in
|
|
};
|
|
|
|
if (json["CurrencyOut"] !== "XRP") json["IssuerOut"] = this._issuer_out;
|
|
if (json["CurrencyIn"] !== "XRP") json["IssuerIn"] = this._issuer_in;
|
|
|
|
return json;
|
|
};
|
|
|
|
/**
|
|
* Whether the OrderBook is valid.
|
|
*
|
|
* Note: This only checks whether the parameters (currencies and issuer) are
|
|
* syntactically valid. It does not check anything against the ledger.
|
|
*/
|
|
OrderBook.prototype.is_valid = function ()
|
|
{
|
|
return (
|
|
Currency.is_valid(this._currency_in) &&
|
|
(this._currency_in !== "XRP" && UInt160.is_valid(this._issuer_in)) &&
|
|
Currency.is_valid(this._currency_out) &&
|
|
(this._currency_out !== "XRP" && UInt160.is_valid(this._issuer_out)) &&
|
|
!(this._currency_in === "XRP" && this._currency_out === "XRP")
|
|
);
|
|
};
|
|
|
|
exports.OrderBook = OrderBook;
|
|
|
|
// vim:sw=2:sts=2:ts=8:et
|