diff --git a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java index 283f59d79f..853e69ed26 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/GetPeerAddress.java @@ -55,7 +55,7 @@ public class GetPeerAddress extends Task { } @Override - protected void applyErrorState() { + protected void rollBackOnFault() { model.getOffer().setState(Offer.State.OFFERER_OFFLINE); } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java index 5fb857b52a..d92b44dc1b 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/availability/tasks/ProcessReportOfferAvailabilityMessage.java @@ -51,7 +51,7 @@ public class ProcessReportOfferAvailabilityMessage extends Task { } @Override - protected void applyErrorState() { + protected void rollBackOnFault() { if (model.getOffer().getState() != Offer.State.OFFERER_OFFLINE) model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java index 00692b350e..eb77f26c70 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/AddOfferToRemoteOfferBook.java @@ -41,5 +41,7 @@ public class AddOfferToRemoteOfferBook extends Task { (message, throwable) -> { failed(throwable); }); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java index f5b7478fd2..be5a103847 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/BroadcastCreateOfferFeeTx.java @@ -103,7 +103,7 @@ public class BroadcastCreateOfferFeeTx extends Task { } } - protected void applyErrorState() { + protected void rollBackOnFault() { if (!removeOfferFailed && !addOfferFailed) { // If broadcast fails we need to remove offer from offerbook model.getOfferBookService().removeOffer(model.getOffer(), diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java index bb6f9754f6..9c17948205 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/CreateOfferFeeTx.java @@ -46,5 +46,7 @@ public class CreateOfferFeeTx extends Task { } catch (Throwable t) { failed(t); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java index 2adc48753e..2a13aa9bc3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/placeoffer/tasks/ValidateOffer.java @@ -40,5 +40,7 @@ public class ValidateOffer extends Task { } catch (Exception e) { failed(e); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java index b36a9aa882..87b2a0de67 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/BuyerAsOffererProtocol.java @@ -78,31 +78,6 @@ public class BuyerAsOffererProtocol { // Incoming message handling /////////////////////////////////////////////////////////////////////////////////////////// - private void handleMessage(Message message, Peer peer) { - log.trace("handleNewMessage: message = " + message.getClass().getSimpleName()); - if (message instanceof TradeMessage) { - TradeMessage tradeMessage = (TradeMessage) message; - nonEmptyStringOf(tradeMessage.getTradeId()); - - if (tradeMessage instanceof RequestTakeOfferMessage) { - handleRequestTakeOfferMessage((RequestTakeOfferMessage) tradeMessage, peer); - } - else if (tradeMessage instanceof TakeOfferFeePayedMessage) { - handleTakeOfferFeePayedMessage((TakeOfferFeePayedMessage) tradeMessage); - } - - else if (tradeMessage instanceof RequestOffererPublishDepositTxMessage) { - handleRequestOffererPublishDepositTxMessage((RequestOffererPublishDepositTxMessage) tradeMessage); - } - else if (tradeMessage instanceof PayoutTxPublishedMessage) { - handlePayoutTxPublishedMessage((PayoutTxPublishedMessage) tradeMessage); - } - else { - log.error("Incoming tradeMessage not supported. " + tradeMessage); - } - } - } - private void handleRequestTakeOfferMessage(RequestTakeOfferMessage tradeMessage, Peer peer) { model.setTradeMessage(tradeMessage); model.setPeer(peer); @@ -205,4 +180,34 @@ public class BuyerAsOffererProtocol { taskRunner.addTasks(ProcessPayoutTxPublishedMessage.class); taskRunner.run(); } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Massage dispatcher + /////////////////////////////////////////////////////////////////////////////////////////// + + private void handleMessage(Message message, Peer peer) { + log.trace("handleNewMessage: message = " + message.getClass().getSimpleName()); + if (message instanceof TradeMessage) { + TradeMessage tradeMessage = (TradeMessage) message; + nonEmptyStringOf(tradeMessage.getTradeId()); + + if (tradeMessage instanceof RequestTakeOfferMessage) { + handleRequestTakeOfferMessage((RequestTakeOfferMessage) tradeMessage, peer); + } + else if (tradeMessage instanceof TakeOfferFeePayedMessage) { + handleTakeOfferFeePayedMessage((TakeOfferFeePayedMessage) tradeMessage); + } + + else if (tradeMessage instanceof RequestOffererPublishDepositTxMessage) { + handleRequestOffererPublishDepositTxMessage((RequestOffererPublishDepositTxMessage) tradeMessage); + } + else if (tradeMessage instanceof PayoutTxPublishedMessage) { + handlePayoutTxPublishedMessage((PayoutTxPublishedMessage) tradeMessage); + } + else { + log.error("Incoming tradeMessage not supported. " + tradeMessage); + } + } + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/messages/RespondToTakeOfferRequestMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/messages/RespondToTakeOfferRequestMessage.java index d9e5a7a3d7..0f5eb01579 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/messages/RespondToTakeOfferRequestMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/messages/RespondToTakeOfferRequestMessage.java @@ -26,11 +26,11 @@ import org.jetbrains.annotations.NotNull; public class RespondToTakeOfferRequestMessage implements Serializable, TradeMessage { private static final long serialVersionUID = 6177387534087739018L; private final String tradeId; - private final boolean takeOfferRequestAccepted; + private final boolean offerIsAvailable; - public RespondToTakeOfferRequestMessage(@NotNull String tradeId, boolean takeOfferRequestAccepted) { + public RespondToTakeOfferRequestMessage(@NotNull String tradeId, boolean offerIsAvailable) { this.tradeId = tradeId; - this.takeOfferRequestAccepted = takeOfferRequestAccepted; + this.offerIsAvailable = offerIsAvailable; } @Override @@ -38,7 +38,7 @@ public class RespondToTakeOfferRequestMessage implements Serializable, TradeMess return tradeId; } - public boolean isTakeOfferRequestAccepted() { - return takeOfferRequestAccepted; + public boolean isOfferIsAvailable() { + return offerIsAvailable; } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java index 6cedc9352f..bf5dbe37be 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/CreateDepositTx.java @@ -60,5 +60,7 @@ public class CreateDepositTx extends Task { } catch (InsufficientMoneyException e) { failed(e); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java index dca1736fed..6bed50378c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessPayoutTxPublishedMessage.java @@ -52,5 +52,7 @@ public class ProcessPayoutTxPublishedMessage extends Task { } catch (Throwable t) { failed(t); } + } @Override + protected void rollBackOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java index 5c6783f329..140ff38e8b 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessRequestOffererPublishDepositTxMessage.java @@ -55,5 +55,7 @@ public class ProcessRequestOffererPublishDepositTxMessage extends Task { } catch (Throwable t) { failed(t); } + } @Override + protected void rollBackOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java index 5ca464c255..30b36ba746 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/ProcessTakeOfferFeePayedMessage.java @@ -51,5 +51,7 @@ public class ProcessTakeOfferFeePayedMessage extends Task { } catch (Throwable t) { failed(t); } + } @Override + protected void rollBackOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java index f124f4167e..1b489b74a6 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/RespondToTakeOfferRequest.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; public class RespondToTakeOfferRequest extends Task { private static final Logger log = LoggerFactory.getLogger(RespondToTakeOfferRequest.class); + private boolean offerIsAvailable; public RespondToTakeOfferRequest(TaskRunner taskHandler, BuyerAsOffererModel model) { super(taskHandler, model); @@ -37,27 +38,36 @@ public class RespondToTakeOfferRequest extends Task { @Override protected void doRun() { - boolean takeOfferRequestAccepted = model.getOpenOffer().getState() == OpenOffer.State.OPEN; - if (!takeOfferRequestAccepted) + offerIsAvailable = model.getOpenOffer().getState() == OpenOffer.State.OPEN; + + if (offerIsAvailable) { + model.getOpenOffer().setState(OpenOffer.State.OFFER_ACCEPTED); + Trade trade = new Trade(model.getOpenOffer().getOffer()); + model.setTrade(trade); + } + else { log.info("Received take offer request but the offer not marked as open anymore."); + } - Trade trade = new Trade(model.getOpenOffer().getOffer()); - model.setTrade(trade); - model.getOpenOffer().setState(OpenOffer.State.OFFER_ACCEPTED); - - RespondToTakeOfferRequestMessage tradeMessage = new RespondToTakeOfferRequestMessage(trade.getId(), takeOfferRequestAccepted); + RespondToTakeOfferRequestMessage tradeMessage = new RespondToTakeOfferRequestMessage(model.getOpenOffer().getId(), offerIsAvailable); model.getTradeMessageService().sendMessage(model.getPeer(), tradeMessage, new SendMessageListener() { @Override public void handleResult() { - log.trace("RespondToTakeOfferRequestMessage successfully arrived at peer"); complete(); } @Override public void handleFault() { - failed("AcceptTakeOfferRequestMessage did not arrive at peer"); + failed(); } }); + } + @Override + protected void rollBackOnFault() { + if (offerIsAvailable && model.getOpenOffer().getState() == OpenOffer.State.OFFER_ACCEPTED) { + model.getOpenOffer().setState(OpenOffer.State.OPEN); + model.setTrade(null); + } } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java index 3821c0c794..793fa672a0 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendBankTransferInitedMessage.java @@ -55,5 +55,7 @@ public class SendBankTransferInitedMessage extends Task { failed("Sending BankTransferInitedMessage failed."); } }); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java index ca0ea826c6..29df03c6d2 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendDepositTxIdToTaker.java @@ -52,5 +52,7 @@ public class SendDepositTxIdToTaker extends Task { failed("Sending DepositTxPublishedMessage failed."); } }); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java index 2edae65d85..bd479b3cc8 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SendTakerDepositPaymentRequest.java @@ -55,5 +55,7 @@ public class SendTakerDepositPaymentRequest extends Task { failed("RequestTakerDepositPaymentMessage did not arrive at peer"); } }); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java index 84c7acab5b..eaa4c3b27f 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SetupListenerForBlockChainConfirmation.java @@ -54,5 +54,7 @@ public class SetupListenerForBlockChainConfirmation extends Task { } catch (Exception e) { failed(e); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java index 65333e81f8..6eecac037c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/SignPayoutTx.java @@ -61,6 +61,8 @@ public class SignPayoutTx extends Task { } catch (Exception e) { failed(e); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java index 8d8a9bf6ec..48a524cd86 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyAndSignContract.java @@ -56,5 +56,7 @@ public class VerifyAndSignContract extends Task { trade.setTakerContractSignature(signature); complete(); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java index a45bf33944..5b37862a09 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakeOfferFeePayment.java @@ -41,5 +41,7 @@ public class VerifyTakeOfferFeePayment extends Task { complete(); } - + @Override + protected void rollBackOnFault() { + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java index d22eed65a0..5a4973dd16 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/offerer/tasks/VerifyTakerAccount.java @@ -46,5 +46,7 @@ public class VerifyTakerAccount extends Task { else { failed("Account registration validation for peer failed."); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java index c3e9b605ff..406aaf02fe 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/SellerAsTakerProtocol.java @@ -68,6 +68,10 @@ public class SellerAsTakerProtocol { // Called from UI /////////////////////////////////////////////////////////////////////////////////////////// + public void cleanup() { + model.getTradeMessageService().removeMessageHandler(messageHandler); + } + public void takeOffer() { model.getTradeMessageService().addMessageHandler(messageHandler); @@ -86,39 +90,11 @@ public class SellerAsTakerProtocol { taskRunner.run(); } - public void cleanup() { - model.getTradeMessageService().removeMessageHandler(messageHandler); - } - /////////////////////////////////////////////////////////////////////////////////////////// // Incoming message handling /////////////////////////////////////////////////////////////////////////////////////////// - private void handleMessage(Message message, Peer sender) { - log.trace("handleNewMessage: message = " + message.getClass().getSimpleName()); - if (message instanceof TradeMessage) { - TradeMessage tradeMessage = (TradeMessage) message; - nonEmptyStringOf(tradeMessage.getTradeId()); - - if (tradeMessage instanceof RespondToTakeOfferRequestMessage) { - handleRespondToTakeOfferRequestMessage((RespondToTakeOfferRequestMessage) tradeMessage); - } - else if (tradeMessage instanceof TakerDepositPaymentRequestMessage) { - handleTakerDepositPaymentRequestMessage((TakerDepositPaymentRequestMessage) tradeMessage); - } - else if (tradeMessage instanceof DepositTxPublishedMessage) { - handleDepositTxPublishedMessage((DepositTxPublishedMessage) tradeMessage); - } - else if (tradeMessage instanceof BankTransferStartedMessage) { - handleBankTransferInitedMessage((BankTransferStartedMessage) tradeMessage); - } - else { - log.error("Incoming message not supported. " + tradeMessage); - } - } - } - private void handleRespondToTakeOfferRequestMessage(RespondToTakeOfferRequestMessage tradeMessage) { model.setTradeMessage(tradeMessage); @@ -214,4 +190,33 @@ public class SellerAsTakerProtocol { ); taskRunner.run(); } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Massage dispatcher + /////////////////////////////////////////////////////////////////////////////////////////// + + private void handleMessage(Message message, Peer sender) { + log.trace("handleNewMessage: message = " + message.getClass().getSimpleName()); + if (message instanceof TradeMessage) { + TradeMessage tradeMessage = (TradeMessage) message; + nonEmptyStringOf(tradeMessage.getTradeId()); + + if (tradeMessage instanceof RespondToTakeOfferRequestMessage) { + handleRespondToTakeOfferRequestMessage((RespondToTakeOfferRequestMessage) tradeMessage); + } + else if (tradeMessage instanceof TakerDepositPaymentRequestMessage) { + handleTakerDepositPaymentRequestMessage((TakerDepositPaymentRequestMessage) tradeMessage); + } + else if (tradeMessage instanceof DepositTxPublishedMessage) { + handleDepositTxPublishedMessage((DepositTxPublishedMessage) tradeMessage); + } + else if (tradeMessage instanceof BankTransferStartedMessage) { + handleBankTransferInitedMessage((BankTransferStartedMessage) tradeMessage); + } + else { + log.error("Incoming message not supported. " + tradeMessage); + } + } + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java index c94d1f35ce..98c7bd135c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/CreateAndSignContract.java @@ -55,5 +55,7 @@ public class CreateAndSignContract extends Task { trade.setTakerContractSignature(signature); complete(); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java index 34e1adc453..2dfb7687f1 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/GetPeerAddress.java @@ -18,6 +18,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; import io.bitsquare.network.Peer; +import io.bitsquare.offer.Offer; import io.bitsquare.trade.listeners.GetPeerAddressListener; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; import io.bitsquare.util.taskrunner.Task; @@ -31,23 +32,32 @@ public class GetPeerAddress extends Task { public GetPeerAddress(TaskRunner taskHandler, SellerAsTakerModel model) { super(taskHandler, model); + errorMessage = "DHT lookup for peer address failed. Maybe the offerer was offline for too long time."; } @Override protected void doRun() { - model.getTradeMessageService().getPeerAddress(model.getOffererMessagePublicKey(), new GetPeerAddressListener() { + model.getTradeMessageService().getPeerAddress(model.getOffer().getMessagePublicKey(), new GetPeerAddressListener() { @Override public void onResult(Peer peer) { log.trace("Found peer: " + peer.toString()); + model.setPeer(peer); complete(); } @Override public void onFailed() { - failed("DHT lookup for peer address failed."); + model.getOffer().setState(Offer.State.OFFERER_OFFLINE); + failed(); } }); } + + @Override + protected void rollBackOnFault() { + if (model.getOffer().getState() != Offer.State.OFFERER_OFFLINE) + model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java index c849d3ad49..975ede2d99 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayDeposit.java @@ -55,5 +55,7 @@ public class PayDeposit extends Task { } catch (InsufficientMoneyException e) { failed(e); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java index 2ba476278a..b26866a65e 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/PayTakeOfferFee.java @@ -17,6 +17,7 @@ package io.bitsquare.trade.protocol.trade.taker.tasks; +import io.bitsquare.trade.Trade; import io.bitsquare.trade.protocol.trade.taker.SellerAsTakerModel; import io.bitsquare.util.taskrunner.Task; import io.bitsquare.util.taskrunner.TaskRunner; @@ -58,4 +59,10 @@ public class PayTakeOfferFee extends Task { failed(e); } } + + @Override + protected void rollBackOnFault() { + // in error case take offer can be repeated so we reset the trade state + model.getTrade().setState(Trade.State.OPEN); + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java index 89b2f2d974..10d6fd0561 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessBankTransferInitedMessage.java @@ -52,5 +52,7 @@ public class ProcessBankTransferInitedMessage extends Task { } catch (Throwable t) { failed(t); } + } @Override + protected void rollBackOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java index 2a029dd75f..2c34fd687f 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessDepositTxPublishedMessage.java @@ -46,5 +46,7 @@ public class ProcessDepositTxPublishedMessage extends Task { } catch (Throwable t) { failed(t); } + } @Override + protected void rollBackOnFault() { } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java index df3e9fcfc6..83b7f2ded2 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/ProcessRespondToTakeOfferRequestMessage.java @@ -40,7 +40,7 @@ public class ProcessRespondToTakeOfferRequestMessage extends Task { new SendMessageListener() { @Override public void handleResult() { - log.trace("Sending RequestTakeOfferMessage succeeded."); complete(); } @Override public void handleFault() { - failed("Sending RequestTakeOfferMessage failed."); + model.getOffer().setState(Offer.State.OFFERER_OFFLINE); + failed(); } }); } + + @Override + protected void rollBackOnFault() { + if (model.getOffer().getState() != Offer.State.OFFERER_OFFLINE) + model.getOffer().setState(Offer.State.AVAILABILITY_CHECK_FAILED); + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java index a8e39bcf3b..742bbb341d 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendPayoutTxToOfferer.java @@ -48,5 +48,7 @@ public class SendPayoutTxToOfferer extends Task { failed("Sending PayoutTxPublishedMessage failed."); } }); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java index 6c13407fd3..36f8575253 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendSignedTakerDepositTxAsHex.java @@ -67,5 +67,7 @@ public class SendSignedTakerDepositTxAsHex extends Task { } }); } - + @Override + protected void rollBackOnFault() { + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java index 2a7ea42060..83106c3f4c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SendTakeOfferFeePayedMessage.java @@ -51,8 +51,12 @@ public class SendTakeOfferFeePayedMessage extends Task { @Override public void handleFault() { - failed("Sending TakeOfferFeePayedMessage failed."); + failed(); } }); } + + @Override + protected void rollBackOnFault() { + } } \ No newline at end of file diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java index 0b21119cf5..26d18be4c3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/SignAndPublishPayoutTx.java @@ -71,5 +71,7 @@ public class SignAndPublishPayoutTx extends Task { } catch (AddressFormatException e) { failed(e); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java index b630dd170a..9d22a308b3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/TakerCommitDepositTx.java @@ -42,5 +42,7 @@ public class TakerCommitDepositTx extends Task { model.getTrade().setState(Trade.State.DEPOSIT_PUBLISHED); complete(); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java index 5b559480b1..3ef9457b4a 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOfferFeePayment.java @@ -39,5 +39,7 @@ public class VerifyOfferFeePayment extends Task { resultHandler.handleResult(); }*/ complete(); + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java index 74485c3786..d3fb1cb4ea 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/taker/tasks/VerifyOffererAccount.java @@ -44,5 +44,7 @@ public class VerifyOffererAccount extends Task { else { failed("Account registration validation for peer faultHandler.onFault."); } + } @Override + protected void rollBackOnFault() { } } diff --git a/core/src/main/java/io/bitsquare/util/taskrunner/Task.java b/core/src/main/java/io/bitsquare/util/taskrunner/Task.java index 4eace2fc8e..5f23045959 100644 --- a/core/src/main/java/io/bitsquare/util/taskrunner/Task.java +++ b/core/src/main/java/io/bitsquare/util/taskrunner/Task.java @@ -47,8 +47,7 @@ public abstract class Task { abstract protected void doRun(); - protected void applyErrorState() { - } + abstract protected void rollBackOnFault(); private void interceptBeforeRun() { if (getClass() == taskToInterceptBeforeRun) @@ -89,7 +88,7 @@ public abstract class Task { } protected void failed() { - applyErrorState(); + rollBackOnFault(); taskHandler.handleErrorMessage(errorMessage); }