process messages until trade is completely finished
This commit is contained in:
parent
2af9019db0
commit
26e3a153bc
2 changed files with 13 additions and 8 deletions
|
@ -620,7 +620,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||||
|
|
||||||
// skip initialization if trade is complete
|
// skip initialization if trade is complete
|
||||||
// starting in v1.0.19, seller resends payment received message until acked or stored in mailbox
|
// starting in v1.0.19, seller resends payment received message until acked or stored in mailbox
|
||||||
if (isPayoutUnlocked() && isCompleted() && !getProtocol().needsToResendPaymentReceivedMessages()) {
|
if (isFinished()) {
|
||||||
clearAndShutDown();
|
clearAndShutDown();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -774,6 +774,10 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||||
isFullyInitialized = true;
|
isFullyInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isFinished() {
|
||||||
|
return isPayoutUnlocked() && isCompleted() && !getProtocol().needsToResendPaymentReceivedMessages();
|
||||||
|
}
|
||||||
|
|
||||||
public void resetToPaymentSentState() {
|
public void resetToPaymentSentState() {
|
||||||
setState(Trade.State.BUYER_SENT_PAYMENT_SENT_MSG);
|
setState(Trade.State.BUYER_SENT_PAYMENT_SENT_MSG);
|
||||||
for (TradePeer peer : getAllPeers()) peer.setPaymentReceivedMessage(null);
|
for (TradePeer peer : getAllPeers()) peer.setPaymentReceivedMessage(null);
|
||||||
|
|
|
@ -165,7 +165,6 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
||||||
}
|
}
|
||||||
} else if (networkEnvelope instanceof AckMessage) {
|
} else if (networkEnvelope instanceof AckMessage) {
|
||||||
onAckMessage((AckMessage) networkEnvelope, peer);
|
onAckMessage((AckMessage) networkEnvelope, peer);
|
||||||
trade.onAckMessage((AckMessage) networkEnvelope, peer); // notify trade listeners
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,11 +209,7 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
||||||
onMailboxMessage(tradeMessage, mailboxMessage.getSenderNodeAddress());
|
onMailboxMessage(tradeMessage, mailboxMessage.getSenderNodeAddress());
|
||||||
} else if (mailboxMessage instanceof AckMessage) {
|
} else if (mailboxMessage instanceof AckMessage) {
|
||||||
AckMessage ackMessage = (AckMessage) mailboxMessage;
|
AckMessage ackMessage = (AckMessage) mailboxMessage;
|
||||||
if (!trade.isCompleted()) {
|
|
||||||
// We only apply the msg if we have not already completed the trade
|
|
||||||
onAckMessage(ackMessage, mailboxMessage.getSenderNodeAddress());
|
onAckMessage(ackMessage, mailboxMessage.getSenderNodeAddress());
|
||||||
}
|
|
||||||
// In any case we remove the msg
|
|
||||||
processModel.getP2PService().getMailboxMessageService().removeMailboxMsg(ackMessage);
|
processModel.getP2PService().getMailboxMessageService().removeMailboxMsg(ackMessage);
|
||||||
log.info("Remove {} from the P2P network.", ackMessage.getClass().getSimpleName());
|
log.info("Remove {} from the P2P network.", ackMessage.getClass().getSimpleName());
|
||||||
}
|
}
|
||||||
|
@ -242,7 +237,7 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
||||||
protected void onInitialized() {
|
protected void onInitialized() {
|
||||||
|
|
||||||
// listen for direct messages unless completed
|
// listen for direct messages unless completed
|
||||||
if (!trade.isCompleted()) processModel.getP2PService().addDecryptedDirectMessageListener(this);
|
if (!trade.isFinished()) processModel.getP2PService().addDecryptedDirectMessageListener(this);
|
||||||
|
|
||||||
// initialize trade
|
// initialize trade
|
||||||
synchronized (trade.getLock()) {
|
synchronized (trade.getLock()) {
|
||||||
|
@ -719,6 +714,9 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
||||||
|
|
||||||
private void onAckMessage(AckMessage ackMessage, NodeAddress sender) {
|
private void onAckMessage(AckMessage ackMessage, NodeAddress sender) {
|
||||||
|
|
||||||
|
// ignore if trade is completely finished
|
||||||
|
if (trade.isFinished()) return;
|
||||||
|
|
||||||
// get trade peer
|
// get trade peer
|
||||||
TradePeer peer = trade.getTradePeer(sender);
|
TradePeer peer = trade.getTradePeer(sender);
|
||||||
if (peer == null) {
|
if (peer == null) {
|
||||||
|
@ -791,6 +789,9 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
||||||
log.warn("Received AckMessage with error state for {}, sender={}, trade={} {}, messageUid={}, errorMessage={}", ackMessage.getSourceMsgClassName(), sender, trade.getClass().getSimpleName(), trade.getId(), ackMessage.getSourceUid(), ackMessage.getErrorMessage());
|
log.warn("Received AckMessage with error state for {}, sender={}, trade={} {}, messageUid={}, errorMessage={}", ackMessage.getSourceMsgClassName(), sender, trade.getClass().getSimpleName(), trade.getId(), ackMessage.getSourceUid(), ackMessage.getErrorMessage());
|
||||||
handleError(ackMessage.getErrorMessage());
|
handleError(ackMessage.getErrorMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// notify trade listeners
|
||||||
|
trade.onAckMessage(ackMessage, sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void sendAckMessage(NodeAddress peer, TradeMessage message, boolean result, @Nullable String errorMessage) {
|
protected void sendAckMessage(NodeAddress peer, TradeMessage message, boolean result, @Nullable String errorMessage) {
|
||||||
|
|
Loading…
Reference in a new issue