mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-10-10 09:38:35 -04:00
add function to determine if dispute opened message needs resent
This commit is contained in:
parent
7ca861b692
commit
c7a790124a
3 changed files with 34 additions and 18 deletions
|
@ -53,30 +53,38 @@ public class ArbitratorProtocol extends DisputeProtocol {
|
|||
|
||||
public void sendDisputeOpenedMessageIfApplicable() {
|
||||
ThreadUtils.execute(() -> {
|
||||
if (!needsToResendDisputeOpenedMessage()) return;
|
||||
if (trade.isShutDownStarted() || trade.isPayoutPublished()) return;
|
||||
synchronized (trade.getLock()) {
|
||||
if (trade.isShutDownStarted() || trade.isPayoutPublished()) return;
|
||||
if (trade.getDisputeState() == Trade.DisputeState.DISPUTE_OPENED) {
|
||||
latchTrade();
|
||||
given(new Condition(trade))
|
||||
.setup(tasks(
|
||||
ArbitratorSendDisputeOpenedMessageToBuyer.class,
|
||||
ArbitratorSendDisputeOpenedMessageToSeller.class)
|
||||
.using(new TradeTaskRunner(trade,
|
||||
() -> {
|
||||
unlatchTrade();
|
||||
},
|
||||
(errorMessage) -> {
|
||||
log.warn("Error sending DisputeOpenedMessage: " + errorMessage);
|
||||
unlatchTrade();
|
||||
})))
|
||||
.executeTasks();
|
||||
awaitTradeLatch();
|
||||
}
|
||||
if (!needsToResendDisputeOpenedMessage()) return;
|
||||
latchTrade();
|
||||
given(new Condition(trade))
|
||||
.setup(tasks(
|
||||
ArbitratorSendDisputeOpenedMessageToBuyer.class,
|
||||
ArbitratorSendDisputeOpenedMessageToSeller.class)
|
||||
.using(new TradeTaskRunner(trade,
|
||||
() -> {
|
||||
unlatchTrade();
|
||||
},
|
||||
(errorMessage) -> {
|
||||
log.warn("Error sending DisputeOpenedMessage: " + errorMessage);
|
||||
unlatchTrade();
|
||||
})))
|
||||
.executeTasks();
|
||||
awaitTradeLatch();
|
||||
}
|
||||
}, trade.getId());
|
||||
}
|
||||
|
||||
private boolean needsToResendDisputeOpenedMessage() {
|
||||
if (trade.isShutDownStarted()) return false;
|
||||
if (trade.isPayoutPublished()) return false;
|
||||
if (trade.getBuyer().getDisputeOpenedMessage() == null && trade.getSeller().getDisputeOpenedMessage() == null) return false;
|
||||
if (trade.getDisputeState() != Trade.DisputeState.DISPUTE_OPENED) return false;
|
||||
if (!((ArbitratorTrade) trade).resendDisputeOpenedMessageWithinDuration()) return false;
|
||||
return !trade.getProcessModel().isDisputeOpenedMessageAckedOrStored();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Incoming messages
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -313,6 +313,10 @@ public class ProcessModel implements Model, PersistablePayload {
|
|||
return getArbitrator().isPaymentReceivedMessageAckedOrStored() && getBuyer().isPaymentReceivedMessageAckedOrStored();
|
||||
}
|
||||
|
||||
public boolean isDisputeOpenedMessageAckedOrStored() {
|
||||
return getBuyer().isDisputeOpenedMessageAckedOrStored() || getSeller().isDisputeOpenedMessageAckedOrStored();
|
||||
}
|
||||
|
||||
void setDepositTxSentAckMessage(AckMessage ackMessage) {
|
||||
MessageState messageState = ackMessage.isSuccess() ?
|
||||
MessageState.ACKNOWLEDGED :
|
||||
|
|
|
@ -304,6 +304,10 @@ public final class TradePeer implements PersistablePayload {
|
|||
return disputeOpenedMessageStateProperty.get() == MessageState.ACKNOWLEDGED || disputeOpenedMessageStateProperty.get() == MessageState.STORED_IN_MAILBOX || disputeOpenedMessageStateProperty.get() == MessageState.NACKED;
|
||||
}
|
||||
|
||||
public boolean isDisputeOpenedMessageAckedOrStored() {
|
||||
return disputeOpenedMessageStateProperty.get() == MessageState.ACKNOWLEDGED || disputeOpenedMessageStateProperty.get() == MessageState.STORED_IN_MAILBOX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message toProtoMessage() {
|
||||
final protobuf.TradePeer.Builder builder = protobuf.TradePeer.newBuilder();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue