mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-10-11 18:10:50 -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() {
|
public void sendDisputeOpenedMessageIfApplicable() {
|
||||||
ThreadUtils.execute(() -> {
|
ThreadUtils.execute(() -> {
|
||||||
|
if (!needsToResendDisputeOpenedMessage()) return;
|
||||||
if (trade.isShutDownStarted() || trade.isPayoutPublished()) return;
|
if (trade.isShutDownStarted() || trade.isPayoutPublished()) return;
|
||||||
synchronized (trade.getLock()) {
|
synchronized (trade.getLock()) {
|
||||||
if (trade.isShutDownStarted() || trade.isPayoutPublished()) return;
|
if (!needsToResendDisputeOpenedMessage()) return;
|
||||||
if (trade.getDisputeState() == Trade.DisputeState.DISPUTE_OPENED) {
|
latchTrade();
|
||||||
latchTrade();
|
given(new Condition(trade))
|
||||||
given(new Condition(trade))
|
.setup(tasks(
|
||||||
.setup(tasks(
|
ArbitratorSendDisputeOpenedMessageToBuyer.class,
|
||||||
ArbitratorSendDisputeOpenedMessageToBuyer.class,
|
ArbitratorSendDisputeOpenedMessageToSeller.class)
|
||||||
ArbitratorSendDisputeOpenedMessageToSeller.class)
|
.using(new TradeTaskRunner(trade,
|
||||||
.using(new TradeTaskRunner(trade,
|
() -> {
|
||||||
() -> {
|
unlatchTrade();
|
||||||
unlatchTrade();
|
},
|
||||||
},
|
(errorMessage) -> {
|
||||||
(errorMessage) -> {
|
log.warn("Error sending DisputeOpenedMessage: " + errorMessage);
|
||||||
log.warn("Error sending DisputeOpenedMessage: " + errorMessage);
|
unlatchTrade();
|
||||||
unlatchTrade();
|
})))
|
||||||
})))
|
.executeTasks();
|
||||||
.executeTasks();
|
awaitTradeLatch();
|
||||||
awaitTradeLatch();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, trade.getId());
|
}, 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
|
// Incoming messages
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -313,6 +313,10 @@ public class ProcessModel implements Model, PersistablePayload {
|
||||||
return getArbitrator().isPaymentReceivedMessageAckedOrStored() && getBuyer().isPaymentReceivedMessageAckedOrStored();
|
return getArbitrator().isPaymentReceivedMessageAckedOrStored() && getBuyer().isPaymentReceivedMessageAckedOrStored();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDisputeOpenedMessageAckedOrStored() {
|
||||||
|
return getBuyer().isDisputeOpenedMessageAckedOrStored() || getSeller().isDisputeOpenedMessageAckedOrStored();
|
||||||
|
}
|
||||||
|
|
||||||
void setDepositTxSentAckMessage(AckMessage ackMessage) {
|
void setDepositTxSentAckMessage(AckMessage ackMessage) {
|
||||||
MessageState messageState = ackMessage.isSuccess() ?
|
MessageState messageState = ackMessage.isSuccess() ?
|
||||||
MessageState.ACKNOWLEDGED :
|
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;
|
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
|
@Override
|
||||||
public Message toProtoMessage() {
|
public Message toProtoMessage() {
|
||||||
final protobuf.TradePeer.Builder builder = protobuf.TradePeer.newBuilder();
|
final protobuf.TradePeer.Builder builder = protobuf.TradePeer.newBuilder();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue