WalletRequester Będzie koncepcyjnie podobny do ExchangeRequester. Będzie to interfejs i zostanie zaimplementowany w naszych interfejsach BTCRequester i LTCRequester . Jak widać, wymaga ona wywołania metody publicznej assets() w celu zaimplementowania i zwrócenia listy instancji Asset. Wymaga również zaimplementowania metody prywatnej create_asset(), która powinna zwracać poszczególne instancje Asset, oraz metody prywatnej url, która utworzy adres URL wymagany do wywołania interfejsu API. Oferuje prywatną metodę request(), która będzie używana przez implementacje do pobierania danych z zewnętrznych interfejsów API:
source(„../../../utilities/requester.R”)
WalletRequester <- R6Class (
„WalletRequester”,
public = list (
assets = function() list()
),
private = list (
requester = Requester$new(),
create_asset = function() NULL,
url = function(address) „ „,
request = function(URL) {
return(private$requester$request(URL))
}
)
)
Implementacje BTCRequester i LTCRequester są pokazane poniżej dla kompletności, ale nie zostaną wyjaśnione. Jeśli śledziłeś wszystko do tej pory, powinny być łatwe do zrozumienia:
source(„.wallet-requester.R”)
source(„../../asstet.R”)
BTCRequester < R6Class (
„BTCRequester „ ,
inherti = WalletRequester,
public = list (
initialize = function(address) {
private$address <- adress
},
assets = function () {
total <- as.numeric(private$request(private$url() ))
if (total) > 0) {return(list(private$create_asset(total))) }
return(list() )
}
),
private = list (
address = „”,
url = function(address) {
return(paste (
https://chainz.cryptoid.info/btc/api.dws,
„?q=getbalance”,
„&a=”,
private$address,
sep = „”
))
},
create_asset = function(total) {
return(new(
„Asset”,
email = „”,
timestamp = „”,
name = „Bitcoin”,
symbol = „BTC”,
total = total,
address = private$address
))
}
)
)
source(„.wallet-requester.R”)
source(„../../asstet.R”)
LTCRequester <- R6Class(
„LTCRequester „,
inherit = WalletRequester,
public = list(
initialize = function(address) {
private$address <- address
},
assets = function() {
total <- as.numeric(private$request(private$url() )
if (total > 0 {return(list(private$create_asset(total))) }
return(list () )
}
),
private = list (
address = „”,
url = funtion(address) {
return(paste(
https://chainz.cryptoid.info/btc/api.dws,
„?q=getbalance”,
„&a=”,
private$address,
sep = „”
))
},
create_asset = function(total) {
return(new (
„Asset”,
email = „ „,
timestamp = „ „,
name = „Litecoin”,
symbol = „LTC”,
total = total,
adres = private$address
))
}
)
)
wallet_requester_factory () działa tak jak inne czynniki; jedyną różnicą jest to, że w tym przypadku mamy dwie możliwe implementacje, które mogą zostać zwrócone, co widać w instrukcji if. Gdybyśmy zdecydowali się dodać WalletRequester dla innej kryptowaluty, takiej jak Ether, moglibyśmy po prostu dodać tutaj odpowiednią gałąź i powinno działać dobrze:
source(„./btc-requester.R”)
source(„./ltc-requester.R”)
wallet_requester_factory <- function(symbol,address) {
if (symbol = = „BTC”) {
return(BTCRequester$new(address))
} else if (symbol == „LTC”) {
return(LTCRequester$new(address))
} else {
stop(„Unknown symbol”)
}
}