@Override public void called(Response response) { flow.makePathFindRequestIfNoneAlready(); threadSafeSetStatus("Transaction submission error (" + response.rpcerr + ")" + awaitingTransactionsParenthetical(account)); } });
@Override public void called(Client client) { if (pathFind != null) { makePathFindRequestIfCan(); } } };
public Alternative(PathSet paths, Amount sourceAmount) { this.paths = paths; this.sourceAmount = sourceAmount; this.hash = calculateHash(paths, sourceAmount); }
private Alternatives constructAlternatives(JSONArray alternatives, Alternatives prior) { Alternatives alts; if (alternatives == null) { alts = new Alternatives(); } else { alts = new Alternatives(alternatives, prior); } if (destinationAmount.isNative() && !src.equals(dest) && srcCanSendNative(destinationAmount)) { injectNativeAlternative(alts, prior); } return alts; }
@Override public void run() { flow.destination(destination); } };
private void unsubscribeFromClientEvents() { // client.removeListener(Client.OnMessage.class, onClientMessage); // client.removeListener(Client.OnSendMessage.class, onClientSendMessage); if (flow != null) { flow.abort(); flow.unsubscribeFromClientEvents(); } }
@Override public void run() { flow.destinationAmountCurrency(destinationCurrency); } };
@Override public void run() { flow.destinationAmountValue(destinationAmountValue); } };
public void abort() { requestPathFindClose(); ignoreCurrentRequestAndPublishStaleState(); }
private void injectNativeAlternative(Alternatives alts, Alternatives prior) { Alternative directXRP = new Alternative(new PathSet(), destinationAmount); alts.addRecyclingPrior(0, directXRP, prior); }
private void ignoreCurrentRequestAndPublishStaleState() { pathFind = null; if (alternatives != null) { emit(OnAlternativesStale.class, alternatives); } // TODO invalidate existing alternatives }
public PaymentFlow onAlternatives(OnAlternatives handler) { on(OnAlternatives.class, handler); return this; }
public void addRecyclingPrior(Alternative alt, Alternatives prior) { addRecyclingPrior(null, alt, prior); } }
private Alternatives constructInitialAlternatives() { return constructAlternatives(null, null); }
@Override public void called(Response response) { flow.makePathFindRequestIfNoneAlready(); threadSafeSetStatus("Transaction submitted " + awaitingTransactionsParenthetical(account)); } });
public void makePathFindRequestIfNoneAlready() { if (pathFind == null) { makePathFindRequestIfCan(); } }
@Override public void called(JSONObject jsonObject) { int id = jsonObject.getInt("id"); if (pathFind != null && id == pathFind.id) { emit(OnAlternatives.class, constructAlternatives(jsonObject.getJSONArray("alternatives"), alternatives)); } } };
public PaymentFlow(final Client client) { this.client = client; client.on(Client.OnConnected.class, onConnected); client.on(Client.OnPathFind.class, onPathFind); on(OnAlternatives.class, new OnAlternatives() { @Override public void called(Alternatives alts) { alternatives = alts; } }); }
@Override public void called(TransactionResult result) { flow.makePathFindRequestIfNoneAlready(); threadSafeSetStatus("Transaction finalized " + awaitingTransactionsParenthetical(account)); } });
@Override public void called(Response response) { flow.makePathFindRequestIfNoneAlready(); threadSafeSetStatus("Transaction submission failed (" + response.engineResult() + ")" + awaitingTransactionsParenthetical(account)); } });