@Override public void addEventListener(ConnectionEventListener listener) { addEventListener(listener, Threading.USER_THREAD); }
private void addEventListener(ConnectionEventListener listener, Executor executor) { boolean isNew = !ListenerRegistration.removeFromList(listener, eventListeners); eventListeners.add(new ListenerRegistration<ConnectionEventListener>(listener, executor)); if (isNew && isActivelyConnected()) { broadcastOnConnection(); } }
@Override public void stopAsync() { if (stopped) return; stopped = true; if (isActivelyConnected()) broadcastOnDisconnect(); eventListeners.clear(); connectionExec.remove(reconnectTask); if (blockchainSubscription != null) { blockchainSubscription.shutdownNow(); blockchainSubscription = null; } if (ecSubscription != null) { ecSubscription.shutdownNow(); ecSubscription = null; } if (addressSubscription != null) { addressSubscription.shutdownNow(); addressSubscription = null; } }
private BlockchainConnection getConnection(CoinType type) { if (connections.containsKey(type)) return connections.get(type); // Try to create a connection if (addresses.containsKey(type)) { if (type instanceof BitFamily) { ServerClient client = new ServerClient(addresses.get(type), connectivityHelper); client.setCacheDir(cacheDir, cacheSize); connections.put(type, client); return client; } else if (type instanceof NxtFamily) { NxtServerClient client = new NxtServerClient(addresses.get(type), connectivityHelper); client.setCacheDir(cacheDir, cacheSize); connections.put(type, client); return client; } else { throw new UnsupportedCoinTypeException(type); } } else { // Should not happen throw new RuntimeException("Tried to create connection for an unknown server."); } }
private String getEcUrl() { return getBaseUrl() + GET_REQUEST + GET_EC_BLOCK; }
public void getTransactionBytes(final String txId, final TransactionEventListener<NxtTransaction> listener, final Integer confirmations) { Request request = new Request.Builder().url(getTransactionBytesUrl(txId)).build(); getHttpClient().newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) {
@Override public void getTransaction(final Sha256Hash txHash, final TransactionEventListener<NxtTransaction> listener) { Request request = new Request.Builder().url(getTransactionUrl(txHash.toString())).build(); getHttpClient().newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) {
@Override public boolean broadcastTxSync(final NxtTransaction tx) { RequestBody formBody = new FormEncodingBuilder().add("requestType","broadcastTransaction") .add("transactionBytes", Convert.toHexString(tx.getRawTransaction().getBytes())).build(); Request request = new Request.Builder().url(getBaseUrl()).post(formBody).build(); // FIXME this is not a sync call getHttpClient().newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { log.info("Failed to communicate with server: " + request.toString()); } @Override public void onResponse(Response response) throws IOException { try { if (!response.isSuccessful()) { log.info("Unable to fetch txs."); log.info("[Error code] = " + response.code()); } JSONObject reply = parseReply(response); log.info("Transaction broadcasted {0}", reply.toString()); } catch (IOException e) { log.info("IOException: " + e.getMessage()); } catch (JSONException e) { log.info("Could not parse JSON: " + e.getMessage()); } } }); return true; }
private String getBlockchainStatusUrl() { ServerAddress address = getServerAddress(); StringBuilder builder = new StringBuilder(); builder.append("http://" + address.getHost()).append(":").append(address.getPort()) .append("/nxt?").append(GET_REQUEST).append(GET_LAST_BLOCK); return builder.toString(); }
private void fetchTransactionIfNeeded(Sha256Hash txHash) { checkState(lock.isHeldByCurrentThread(), "Lock is held by another thread"); // Check if need to fetch the transaction log.info("Trying to fetch transaction with hash {}", txHash); if (!isTransactionAvailableOrQueued(txHash)) { log.info("Going to fetch transaction with hash {}", txHash); //fetchingTransactions.add(txHash); if (blockchainConnection != null) { blockchainConnection.getTransaction(txHash, this); } } else { log.info("cannot fetch tx with hash {}", txHash); } }
public boolean broadcastNxtTxSync(NxtTransaction tx) throws TransactionBroadcastException { if (isConnected()) { if (log.isInfoEnabled()) { log.info("Broadcasting tx {}", Utils.HEX.encode(tx.getRawTransaction().getBytes())); } boolean success = blockchainConnection.broadcastTxSync(tx); if (success) { onTransactionBroadcast(tx); } else { onTransactionBroadcastError(tx); } return success; } else { throw new TransactionBroadcastException("No connection available"); } }
@Override public void onAddressStatusUpdate(AddressStatus status) { log.debug("Got a status {}", status); lock.lock(); try { if (status.getStatus() != null) { if (isAddressStatusChanged(status)) { this.balance = Value.valueOf(this.type, Long.valueOf(status.getStatus())); //if (registerStatusForUpdate(status)) { log.info("Must get transactions for address {}, status {}", status.getAddress(), status.getStatus()); if (blockchainConnection != null) { blockchainConnection.getHistoryTx(status, this); } } //} else { // log.info("Status {} already updating", status.getStatus()); //} } else { commitAddressStatus(status); } } finally { lock.unlock(); } }
private String getTransactionBytesUrl(String txId) { StringBuilder builder = new StringBuilder(); builder.append(getBaseUrl()).append(GET_REQUEST).append(GET_TRANSACTION_BYTES) .append("&transaction=").append(txId); return builder.toString(); }
private String getBaseUrl() { ServerAddress address = getServerAddress(); StringBuilder builder = new StringBuilder(); builder.append("http://" + address.getHost()).append(":").append(address.getPort()) .append("/nxt?"); return builder.toString(); }
private String getBlockChainTxsUrl(String address) { StringBuilder builder = new StringBuilder(); builder.append(getBaseUrl()).append(GET_REQUEST).append(GET_BLOCKCHAIN_TXS) .append("&account=").append(address); return builder.toString(); }
private String getTransactionUrl(String txHash) { StringBuilder builder = new StringBuilder(); builder.append(getBaseUrl()).append(GET_REQUEST).append(GET_TRANSACTION) .append("&fullHash=").append(txHash); return builder.toString(); }
private String getAccountInfo(AbstractAddress address) { StringBuilder builder = new StringBuilder(); builder.append(getBaseUrl()).append(GET_REQUEST).append(GET_ACCOUNT) .append("&account=").append(address.toString()); return builder.toString(); }