bitcoin-client

bitcoin client library for price ticker and wallet

git clone https://9o.is/git/bitcoin-client.git

commit 5dc60051dd411e38693622b2641a296f23ea2a97
parent bde13c6fba33d84cff795e6a30a3ed9c3610e00e
Author: Jul <jul@9o.is>
Date:   Sat,  4 Oct 2014 22:18:05 -0400

changed child supervision of wallet and ticker and http services now retries failed connections with a backoff interval

Diffstat:
Msrc/main/scala/inc/pyc/bitcoin/service/HttpBitcoinService.scala | 22++++++++++------------
Msrc/main/scala/inc/pyc/bitcoin/ticker/PriceTicker.scala | 4+---
Msrc/main/scala/inc/pyc/bitcoin/wallet/Wallet.scala | 3+--
3 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/src/main/scala/inc/pyc/bitcoin/service/HttpBitcoinService.scala b/src/main/scala/inc/pyc/bitcoin/service/HttpBitcoinService.scala @@ -2,6 +2,7 @@ package inc.pyc.bitcoin package service import dispatch._ +import Defaults._ import net.liftweb.json.JsonAST.JValue import akka.actor._ @@ -11,32 +12,29 @@ import akka.actor._ trait HttpBitcoinService { this: Actor with ActorLogging => - /** * Service's API */ protected val api: Req - /** * Request headers */ protected val headers: Map[String, String] = Map() - - + /** - * Pretend to be another browser. + * Pretend to be another browser. + * Some API's like BitStamp will block connection otherwise. */ protected val userAgent = "Windows / Chrome 34: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36" - /** * Request and get a json response. */ - protected def request(req: Req): JValue = ({ - import Defaults._ - Http.configure(_.setUserAgent(userAgent))(req <:< headers > as.lift.Json): Future[JValue] - })() - - + protected def request(req: Req): JValue = { + val promise = retry.Backoff(max = 10) { + () => Http.configure(_.setUserAgent(userAgent))(req <:< headers > as.lift.Json).either + } + promise().right.get + } } \ No newline at end of file diff --git a/src/main/scala/inc/pyc/bitcoin/ticker/PriceTicker.scala b/src/main/scala/inc/pyc/bitcoin/ticker/PriceTicker.scala @@ -18,9 +18,7 @@ class PriceTicker(service: BitcoinService.Value) extends BitcoinActorInterface(s override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case _: java.net.ConnectException => Resume - case t => - super.supervisorStrategy.decider. - applyOrElse(t, (_: Any) => Escalate) + case _: Exception => Escalate } implicit val timeout = Timeout(4 seconds) diff --git a/src/main/scala/inc/pyc/bitcoin/wallet/Wallet.scala b/src/main/scala/inc/pyc/bitcoin/wallet/Wallet.scala @@ -22,8 +22,7 @@ class Wallet(service: BitcoinService.Value) extends BitcoinActorInterface(servic override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case _: java.net.ConnectException => Resume - case t => - super.supervisorStrategy.decider.applyOrElse(t, (_: Any) => Escalate) + case _: Exception => Escalate } implicit val timeout = Timeout(5 seconds)