Skip to content

Commit 1a5a754

Browse files
committed
set mailbox message comparator in trade manager to fix npe
1 parent 481b6c8 commit 1a5a754

File tree

2 files changed

+35
-27
lines changed

2 files changed

+35
-27
lines changed

core/src/main/java/haveno/core/trade/TradeManager.java

+34
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,19 @@
4747
import haveno.core.support.dispute.arbitration.arbitrator.Arbitrator;
4848
import haveno.core.support.dispute.arbitration.arbitrator.ArbitratorManager;
4949
import haveno.core.support.dispute.mediation.mediator.MediatorManager;
50+
import haveno.core.support.dispute.messages.DisputeClosedMessage;
51+
import haveno.core.support.dispute.messages.DisputeOpenedMessage;
5052
import haveno.core.trade.Trade.DisputeState;
5153
import haveno.core.trade.Trade.Phase;
5254
import haveno.core.trade.failed.FailedTradesManager;
5355
import haveno.core.trade.handlers.TradeResultHandler;
5456
import haveno.core.trade.messages.DepositRequest;
5557
import haveno.core.trade.messages.DepositResponse;
58+
import haveno.core.trade.messages.DepositsConfirmedMessage;
5659
import haveno.core.trade.messages.InitMultisigRequest;
5760
import haveno.core.trade.messages.InitTradeRequest;
61+
import haveno.core.trade.messages.PaymentReceivedMessage;
62+
import haveno.core.trade.messages.PaymentSentMessage;
5863
import haveno.core.trade.messages.SignContractRequest;
5964
import haveno.core.trade.messages.SignContractResponse;
6065
import haveno.core.trade.messages.TradeMessage;
@@ -80,6 +85,8 @@
8085
import haveno.network.p2p.NodeAddress;
8186
import haveno.network.p2p.P2PService;
8287
import haveno.network.p2p.SendMailboxMessageListener;
88+
import haveno.network.p2p.mailbox.MailboxMessage;
89+
import haveno.network.p2p.mailbox.MailboxMessageService;
8390
import haveno.network.p2p.network.TorNetworkNode;
8491
import javafx.beans.property.BooleanProperty;
8592
import javafx.beans.property.LongProperty;
@@ -100,6 +107,8 @@
100107
import javax.inject.Inject;
101108
import java.math.BigInteger;
102109
import java.util.ArrayList;
110+
import java.util.Arrays;
111+
import java.util.Comparator;
103112
import java.util.Date;
104113
import java.util.HashMap;
105114
import java.util.HashSet;
@@ -153,6 +162,31 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
153162
private final LongProperty numPendingTrades = new SimpleLongProperty();
154163
private final ReferralIdService referralIdService;
155164

165+
// set comparator for processing mailbox messages
166+
static {
167+
MailboxMessageService.setMailboxMessageComparator(new MailboxMessageComparator());
168+
}
169+
170+
/**
171+
* Sort mailbox messages for processing.
172+
*/
173+
public static class MailboxMessageComparator implements Comparator<MailboxMessage> {
174+
private static List<Class<? extends MailboxMessage>> messageOrder = Arrays.asList(
175+
AckMessage.class,
176+
DepositsConfirmedMessage.class,
177+
PaymentSentMessage.class,
178+
PaymentReceivedMessage.class,
179+
DisputeOpenedMessage.class,
180+
DisputeClosedMessage.class);
181+
182+
@Override
183+
public int compare(MailboxMessage m1, MailboxMessage m2) {
184+
int idx1 = messageOrder.indexOf(m1.getClass());
185+
int idx2 = messageOrder.indexOf(m2.getClass());
186+
return idx1 - idx2;
187+
}
188+
}
189+
156190

157191
///////////////////////////////////////////////////////////////////////////////////////////
158192
// Constructor

core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java

+1-27
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,13 @@
2424
import haveno.common.handlers.ErrorMessageHandler;
2525
import haveno.common.proto.network.NetworkEnvelope;
2626
import haveno.common.taskrunner.Task;
27-
import haveno.core.support.dispute.messages.DisputeClosedMessage;
28-
import haveno.core.support.dispute.messages.DisputeOpenedMessage;
2927
import haveno.core.trade.ArbitratorTrade;
3028
import haveno.core.trade.BuyerTrade;
3129
import haveno.core.trade.HavenoUtils;
3230
import haveno.core.trade.SellerTrade;
3331
import haveno.core.trade.Trade;
3432
import haveno.core.trade.TradeManager;
33+
import haveno.core.trade.TradeManager.MailboxMessageComparator;
3534
import haveno.core.trade.handlers.TradeResultHandler;
3635
import haveno.core.trade.messages.DepositRequest;
3736
import haveno.core.trade.messages.DepositResponse;
@@ -70,11 +69,8 @@
7069
import org.fxmisc.easybind.EasyBind;
7170

7271
import javax.annotation.Nullable;
73-
import java.util.Arrays;
7472
import java.util.Collection;
7573
import java.util.Collections;
76-
import java.util.Comparator;
77-
import java.util.List;
7874
import java.util.concurrent.CountDownLatch;
7975

8076
@Slf4j
@@ -93,11 +89,6 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
9389

9490
private int reprocessPaymentReceivedMessageCount;
9591

96-
// set comparator for processing mailbox messages
97-
static {
98-
MailboxMessageService.setMailboxMessageComparator(new MailboxMessageComparator());
99-
}
100-
10192
///////////////////////////////////////////////////////////////////////////////////////////
10293
// Constructor
10394
///////////////////////////////////////////////////////////////////////////////////////////
@@ -184,23 +175,6 @@ private void handleMailboxCollection(Collection<DecryptedMessageWithPubKey> coll
184175
.forEach(this::handleMailboxMessage);
185176
}
186177

187-
public static class MailboxMessageComparator implements Comparator<MailboxMessage> {
188-
private static List<Class<? extends MailboxMessage>> messageOrder = Arrays.asList(
189-
AckMessage.class,
190-
DepositsConfirmedMessage.class,
191-
PaymentSentMessage.class,
192-
PaymentReceivedMessage.class,
193-
DisputeOpenedMessage.class,
194-
DisputeClosedMessage.class);
195-
196-
@Override
197-
public int compare(MailboxMessage m1, MailboxMessage m2) {
198-
int idx1 = messageOrder.indexOf(m1.getClass());
199-
int idx2 = messageOrder.indexOf(m2.getClass());
200-
return idx1 - idx2;
201-
}
202-
}
203-
204178
private void handleMailboxMessage(MailboxMessage mailboxMessage) {
205179
if (mailboxMessage instanceof TradeMessage) {
206180
TradeMessage tradeMessage = (TradeMessage) mailboxMessage;

0 commit comments

Comments
 (0)