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);
}
@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

View File

@ -55,6 +55,14 @@ public abstract class SellerTrade extends Trade {
((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

View File

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

View File

@ -144,22 +144,32 @@ public class BuyerAsOffererProtocol extends TradeProtocol implements BuyerProtoc
// User clicked the "bank transfer started" button
@Override
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,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentStarted");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyTakeOfferFeePayment.class,
SendFiatTransferStartedMessage.class
);
taskRunner.run();
buyerAsOffererTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED);
TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsOffererTrade,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentStarted");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyTakeOfferFeePayment.class,
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
@Override
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,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentStarted");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyOfferFeePayment.class,
SendFiatTransferStartedMessage.class
);
taskRunner.run();
buyerAsTakerTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED);
TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsTakerTrade,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentStarted");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyOfferFeePayment.class,
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
@Override
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,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentReceived");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
sellerAsOffererTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT);
taskRunner.addTasks(
VerifyTakeOfferFeePayment.class,
SignPayoutTx.class,
SendFinalizePayoutTxRequest.class
);
taskRunner.run();
TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsOffererTrade,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentReceived");
},
(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) {

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
@Override
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,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentReceived");
},
(errorMessage) -> {
errorMessageHandler.handleErrorMessage(errorMessage);
handleTaskRunnerFault(errorMessage);
});
taskRunner.addTasks(
VerifyOfferFeePayment.class,
SignPayoutTx.class,
SendFinalizePayoutTxRequest.class
);
taskRunner.run();
sellerAsTakerTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT);
TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsTakerTrade,
() -> {
resultHandler.handleResult();
handleTaskRunnerSuccess("onFiatPaymentReceived");
},
(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) {