Resend confirmation at startup if peer has not continued trade process

This commit is contained in:
Manfred Karrer 2016-03-16 22:55:42 +01:00
parent ee4119b2e6
commit df7f0e7917
7 changed files with 124 additions and 63 deletions

View file

@ -55,6 +55,15 @@ public abstract class BuyerTrade extends Trade {
((BuyerProtocol) tradeProtocol).onFiatPaymentStarted(resultHandler, errorMessageHandler); ((BuyerProtocol) tradeProtocol).onFiatPaymentStarted(resultHandler, errorMessageHandler);
} }
@Override
public void reSendConfirmation() {
if (state == Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG) {
log.info("reSendConfirmation onFiatPaymentStarted");
onFiatPaymentStarted(() -> log.debug("onFiatPaymentStarted succeeded"),
log::warn);
}
}
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
// Setter for Mutable objects // Setter for Mutable objects

View file

@ -55,6 +55,14 @@ public abstract class SellerTrade extends Trade {
((SellerProtocol) tradeProtocol).onFiatPaymentReceived(resultHandler, errorMessageHandler); ((SellerProtocol) tradeProtocol).onFiatPaymentReceived(resultHandler, errorMessageHandler);
} }
@Override
public void reSendConfirmation() {
if (state == State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG) {
log.info("reSendConfirmation onFiatPaymentReceived");
onFiatPaymentReceived(() -> log.debug("onFiatPaymentReceived succeeded"),
log::warn);
}
}
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
// Setter for Mutable objects // Setter for Mutable objects

View file

@ -238,8 +238,12 @@ public abstract class Trade implements Tradable, Model {
if (decryptedMsgWithPubKey != null) { if (decryptedMsgWithPubKey != null) {
tradeProtocol.applyMailboxMessage(decryptedMsgWithPubKey, this); tradeProtocol.applyMailboxMessage(decryptedMsgWithPubKey, this);
} }
reSendConfirmation();
} }
public abstract void reSendConfirmation();
protected void initStateProperties() { protected void initStateProperties() {
stateProperty = new SimpleObjectProperty<>(state); stateProperty = new SimpleObjectProperty<>(state);
disputeStateProperty = new SimpleObjectProperty<>(disputeState); disputeStateProperty = new SimpleObjectProperty<>(disputeState);

View file

@ -144,22 +144,32 @@ public class BuyerAsOffererProtocol extends TradeProtocol implements BuyerProtoc
// User clicked the "bank transfer started" button // User clicked the "bank transfer started" button
@Override @Override
public void onFiatPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { public void onFiatPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
buyerAsOffererTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED); if (buyerAsOffererTrade.getState().ordinal() <= Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG.ordinal()) {
if (buyerAsOffererTrade.getState() == Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG)
log.warn("onFiatPaymentStarted called twice. " +
"That is expected if the app starts up and the other peer has still not continued.");
TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsOffererTrade, buyerAsOffererTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED);
() -> {
resultHandler.handleResult(); TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsOffererTrade,
handleTaskRunnerSuccess("onFiatPaymentStarted"); () -> {
}, resultHandler.handleResult();
(errorMessage) -> { handleTaskRunnerSuccess("onFiatPaymentStarted");
errorMessageHandler.handleErrorMessage(errorMessage); },
handleTaskRunnerFault(errorMessage); (errorMessage) -> {
}); errorMessageHandler.handleErrorMessage(errorMessage);
taskRunner.addTasks( handleTaskRunnerFault(errorMessage);
VerifyTakeOfferFeePayment.class, });
SendFiatTransferStartedMessage.class taskRunner.addTasks(
); VerifyTakeOfferFeePayment.class,
taskRunner.run(); SendFiatTransferStartedMessage.class
);
taskRunner.run();
} else {
log.warn("onFiatPaymentStarted called twice. " +
"That should not happen.\n" +
"state=" + buyerAsOffererTrade.getState());
}
} }

View file

@ -133,22 +133,32 @@ public class BuyerAsTakerProtocol extends TradeProtocol implements BuyerProtocol
// User clicked the "bank transfer started" button // User clicked the "bank transfer started" button
@Override @Override
public void onFiatPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { public void onFiatPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
buyerAsTakerTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED); if (buyerAsTakerTrade.getState().ordinal() <= Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG.ordinal()) {
if (buyerAsTakerTrade.getState() == Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG)
log.warn("onFiatPaymentStarted called twice. " +
"That is expected if the app starts up and the other peer has still not continued.");
TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsTakerTrade, buyerAsTakerTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED);
() -> {
resultHandler.handleResult(); TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsTakerTrade,
handleTaskRunnerSuccess("onFiatPaymentStarted"); () -> {
}, resultHandler.handleResult();
(errorMessage) -> { handleTaskRunnerSuccess("onFiatPaymentStarted");
errorMessageHandler.handleErrorMessage(errorMessage); },
handleTaskRunnerFault(errorMessage); (errorMessage) -> {
}); errorMessageHandler.handleErrorMessage(errorMessage);
taskRunner.addTasks( handleTaskRunnerFault(errorMessage);
VerifyOfferFeePayment.class, });
SendFiatTransferStartedMessage.class taskRunner.addTasks(
); VerifyOfferFeePayment.class,
taskRunner.run(); SendFiatTransferStartedMessage.class
);
taskRunner.run();
} else {
log.warn("onFiatPaymentStarted called twice. " +
"That should not happen.\n" +
"state=" + buyerAsTakerTrade.getState());
}
} }

View file

@ -162,24 +162,34 @@ public class SellerAsOffererProtocol extends TradeProtocol implements SellerProt
// User clicked the "bank transfer received" button, so we release the funds for pay out // User clicked the "bank transfer received" button, so we release the funds for pay out
@Override @Override
public void onFiatPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { public void onFiatPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
sellerAsOffererTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT); if (sellerAsOffererTrade.getState().ordinal() <= Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG.ordinal()) {
if (sellerAsOffererTrade.getState() == Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG)
log.warn("onFiatPaymentReceived called twice. " +
"That is expected if the app starts up and the other peer has still not continued.");
TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsOffererTrade, sellerAsOffererTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT);
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentReceived");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks( TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsOffererTrade,
VerifyTakeOfferFeePayment.class, () -> {
SignPayoutTx.class, resultHandler.handleResult();
SendFinalizePayoutTxRequest.class handleTaskRunnerSuccess("onFiatPaymentReceived");
); },
taskRunner.run(); (errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyTakeOfferFeePayment.class,
SignPayoutTx.class,
SendFinalizePayoutTxRequest.class
);
taskRunner.run();
} else {
log.warn("onFiatPaymentReceived called twice. " +
"That should not happen.\n" +
"state=" + sellerAsOffererTrade.getState());
}
} }
private void handle(PayoutTxFinalizedMessage tradeMessage, NodeAddress sender) { private void handle(PayoutTxFinalizedMessage tradeMessage, NodeAddress sender) {

View file

@ -160,24 +160,34 @@ public class SellerAsTakerProtocol extends TradeProtocol implements SellerProtoc
// User clicked the "bank transfer received" button, so we release the funds for pay out // User clicked the "bank transfer received" button, so we release the funds for pay out
@Override @Override
public void onFiatPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { public void onFiatPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
sellerAsTakerTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT); if (sellerAsTakerTrade.getState().ordinal() <= Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG.ordinal()) {
if (sellerAsTakerTrade.getState() == Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG)
log.warn("onFiatPaymentReceived called twice. " +
"That is expected if the app starts up and the other peer has still not continued.");
TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsTakerTrade, sellerAsTakerTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT);
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentReceived");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks( TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsTakerTrade,
VerifyOfferFeePayment.class, () -> {
SignPayoutTx.class, resultHandler.handleResult();
SendFinalizePayoutTxRequest.class handleTaskRunnerSuccess("onFiatPaymentReceived");
); },
taskRunner.run(); (errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyOfferFeePayment.class,
SignPayoutTx.class,
SendFinalizePayoutTxRequest.class
);
taskRunner.run();
} else {
log.warn("onFiatPaymentReceived called twice. " +
"That should not happen.\n" +
"state=" + sellerAsTakerTrade.getState());
}
} }
private void handle(PayoutTxFinalizedMessage tradeMessage, NodeAddress sender) { private void handle(PayoutTxFinalizedMessage tradeMessage, NodeAddress sender) {