package com.mygeopay.core.network; import com.mygeopay.core.wallet.Wallet; import com.mygeopay.core.coins.CoinType; import com.mygeopay.core.wallet.WalletAccount; import com.mygeopay.core.wallet.WalletPocketHD; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; /** * @author John L. Jegutanis */ public class ServerClients { private static final Logger log = LoggerFactory.getLogger(ServerClient.class); private HashMap<CoinType, ServerClient> connections; public ServerClients(List<CoinAddress> coins, Wallet wallet) { // Supply a dumb ConnectivityHelper that reports that connection is always available this(coins, wallet, new ConnectivityHelper() { @Override public boolean isConnected() { return true; } }); } public ServerClients(List<CoinAddress> coins, Wallet wallet, ConnectivityHelper connectivityHelper) { connections = new HashMap<CoinType, ServerClient>(coins.size()); for (CoinAddress coinAddress : coins) { ServerClient client = new ServerClient(coinAddress, connectivityHelper); connections.put(coinAddress.getType(), client); } setPockets(wallet.getAllAccounts()); } private void setPockets(List<WalletAccount> pockets) { for (WalletAccount pocket : pockets) { ServerClient connection = connections.get(pocket.getCoinType()); if (connection == null) continue; connection.addEventListener(pocket); } } public void resetAccount(WalletAccount account) { ServerClient connection = connections.get(account.getCoinType()); if (connection == null) return; connection.addEventListener(account); connection.resetConnection(); } public void startAllAsync() { for (ServerClient client : connections.values()) { client.startAsync(); } } public void startAsync(WalletAccount pocket) { if (pocket == null) { log.warn("Provided wallet account is null, not doing anything"); return; } CoinType type = pocket.getCoinType(); if (connections.containsKey(type)) { ServerClient c = connections.get(type); c.addEventListener(pocket); c.startAsync(); } else { log.warn("No connection found for {}", type.getName()); } } public void stopAllAsync() { for (ServerClient client : connections.values()) { client.stopAsync(); } } public void ping() { for (final CoinType type : connections.keySet()) { ServerClient connection = connections.get(type); if (connection.isConnected()) connection.ping(); } } public void resetConnections() { for (final CoinType type : connections.keySet()) { ServerClient connection = connections.get(type); if (connection.isConnected()) connection.resetConnection(); } } }