仮想通貨サービス BitCapitalZ の日記

仮想通貨関連のブログです Ripple, Ethereum 仮想通貨2.0に注目しています

【リップル】ripple-lib で板情報の変化や約定の通知を受け取る【Ripple】

ripple-lib とは何かについての説明は 【リップル】Ripple APIs について調べてみる4 ripple-lib とはなにか【Ripple】 - 仮想通貨サービス BitCapitalZ の日記 をご参照下さい。

この ripple-lib を用いて板情報の変化や約定の通知を受け取ることで http://pobits.info/ripple/ious/1 こちらのページにあるような動的に更新される板情報を実装することができます。

以下は板情報の変化や約定の通知を受け取るサンプルコードです。前提として、ripple-lib がロードされている事とします。

        /* Loading ripple-lib with Node.js */
        var Remote = require('ripple-lib').Remote;

        var Servers =
        {
           trace: false,
           trusted: true,
           servers:
           [
               {
                  host: 's-west.ripple.com',
                  port: 443,
                  secure: true
                },
                {
                  host: 's-east.ripple.com',
                  port: 443,
                  secure: true
                }
            ],
            connection_offset: 1
        };

        var Markets =
        [
             {
                name: 'US Dollars',
                currency: 'USD',
                priority: 1,
                gateways:
                [
                   {name: 'bitstamp', address: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'},
                   {name: 'snapswap', address: 'rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q'}
                ]
             }
        ];   

        var remote = new Remote(Servers);

        remote.connect(function()
        {
           //remote.on('transaction_all', transactionListener);
           //var book = remote.book('XRP', null, 'USD', null);   
           var book;
           Markets.forEach(function(Market)
           {
              var Gateways = Market.gateways;
              Gateways.forEach(function(Gateway)
              {
                   ['asks','bids'].forEach(function(action)
                   {
                      if(action == "asks")
                      {
                         book = remote.book(Market.currency, Gateway.address, 'XRP', null);
                      }
                      else
                      {
                         book = remote.book('XRP', null, Market.currency, Gateway.address);
                      }
                      book.on("offer_funds_changed", function(gets, pays, offerAccount, takerAccount){tradeListener(action, gets, pays, Market.currency, Gateway.name, offerAccount, takerAccount);});
                      book.on("offer_changed", function(gets, pays, offerAccount, takerAccount){tradeListener(action, gets, pays, Market.currency, Gateway.name, offerAccount, takerAccount);});
                      book.on("offer_added", function(gets, pays, offerAccount, takerAccount){tradeListener(action, gets, pays, Market.currency, Gateway.name, offerAccount, takerAccount);});
                      book.on("offer_removed", function(gets, pays, offerAccount, takerAccount){tradeListener(action, gets, pays, Market.currency, Gateway.name, offerAccount, takerAccount);});
                      book.on("trade", function(gets, pays, offerAccount, takerAccount){tradeListener(action, gets, pays, Market.currency, Gateway.name, offerAccount, takerAccount);});
                   });
              });
           });
        });

        function tradeListener(action, gets, pays, currency, gatewayName, offerAccount, takerAccount)
        {
          // 板情報の変更、約定がある度に行いたい処理を書く
        }

Marketsオブジェクトで通知を受け取りたい、通貨とゲートウェイを定義して、 bookオブジェクトで受け取りたい板情報の通貨ペア
を定義します。
book.on() の部分で受け取りたい通知の種類と、通知を受け取ったときにディスパッチする関数を定義しています。


引用元: https://forum.ripple.com/viewtopic.php?f=2&t=7488