Skip to content

Commit

Permalink
rename payment sent message state property for seller
Browse files Browse the repository at this point in the history
  • Loading branch information
woodser committed Mar 3, 2025
1 parent 31b0edc commit f1cdaa8
Show file tree
Hide file tree
Showing 9 changed files with 41 additions and 33 deletions.
8 changes: 4 additions & 4 deletions core/src/main/java/haveno/core/trade/Trade.java
Original file line number Diff line number Diff line change
Expand Up @@ -735,9 +735,9 @@ public void initialize(ProcessModelServiceProvider serviceProvider) {
// TODO: buyer's payment sent message state property became unsynced if shut down while awaiting ack from seller. fixed in v1.0.19 so this check can be removed?
if (isBuyer()) {
MessageState expectedState = getPaymentSentMessageState();
if (expectedState != null && expectedState != processModel.getPaymentSentMessageStateProperty().get()) {
log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStateProperty().get());
processModel.getPaymentSentMessageStateProperty().set(expectedState);
if (expectedState != null && expectedState != processModel.getPaymentSentMessageStatePropertySeller().get()) {
log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStatePropertySeller().get());
processModel.getPaymentSentMessageStatePropertySeller().set(expectedState);
}
}

Expand Down Expand Up @@ -2017,7 +2017,7 @@ public String getRole() {

public MessageState getPaymentSentMessageState() {
if (isPaymentReceived()) return MessageState.ACKNOWLEDGED;
if (processModel.getPaymentSentMessageStateProperty().get() == MessageState.ACKNOWLEDGED) return MessageState.ACKNOWLEDGED;
if (processModel.getPaymentSentMessageStatePropertySeller().get() == MessageState.ACKNOWLEDGED) return MessageState.ACKNOWLEDGED;
switch (state) {
case BUYER_SENT_PAYMENT_SENT_MSG:
return MessageState.SENT;
Expand Down
26 changes: 17 additions & 9 deletions core/src/main/java/haveno/core/trade/protocol/ProcessModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public class ProcessModel implements Model, PersistablePayload {
// PaymentSentMessage. As well we do an automatic re-send in case it was not ACKed yet.
// To enable that even after restart we persist the state.
@Setter
private ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
private ObjectProperty<MessageState> paymentSentMessageStatePropertySeller = new SimpleObjectProperty<>(MessageState.UNDEFINED);
@Setter
private ObjectProperty<MessageState> paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED);
private ObjectProperty<Boolean> paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false);
Expand Down Expand Up @@ -203,7 +203,7 @@ public protobuf.ProcessModel toProtoMessage() {
.setPubKeyRing(pubKeyRing.toProtoMessage())
.setUseSavingsWallet(useSavingsWallet)
.setFundsNeededForTrade(fundsNeededForTrade)
.setPaymentSentMessageState(paymentSentMessageStateProperty.get().name())
.setPaymentSentMessageStateSeller(paymentSentMessageStatePropertySeller.get().name())
.setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name())
.setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation)
.setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation)
Expand Down Expand Up @@ -240,9 +240,9 @@ public static ProcessModel fromProto(protobuf.ProcessModel proto, CoreProtoResol
processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress()));
processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress()));

String paymentSentMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageState());
MessageState paymentSentMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateString);
processModel.setPaymentSentMessageState(paymentSentMessageState);
String paymentSentMessageStateSellerString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateSeller());
MessageState paymentSentMessageStateSeller = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateSellerString);
processModel.setPaymentSentMessageStateSeller(paymentSentMessageStateSeller);

String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator());
MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString);
Expand Down Expand Up @@ -274,11 +274,11 @@ public NodeAddress getMyNodeAddress() {
return getP2PService().getAddress();
}

void setPaymentSentAckMessage(AckMessage ackMessage) {
void setPaymentSentAckMessageSeller(AckMessage ackMessage) {
MessageState messageState = ackMessage.isSuccess() ?
MessageState.ACKNOWLEDGED :
MessageState.FAILED;
setPaymentSentMessageState(messageState);
setPaymentSentMessageStateSeller(messageState);
}

void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) {
Expand All @@ -288,8 +288,8 @@ void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) {
setPaymentSentMessageStateArbitrator(messageState);
}

public void setPaymentSentMessageState(MessageState paymentSentMessageStateProperty) {
this.paymentSentMessageStateProperty.set(paymentSentMessageStateProperty);
public void setPaymentSentMessageStateSeller(MessageState paymentSentMessageStateProperty) {
this.paymentSentMessageStatePropertySeller.set(paymentSentMessageStateProperty);
if (tradeManager != null) {
tradeManager.requestPersistence();
}
Expand All @@ -302,6 +302,14 @@ public void setPaymentSentMessageStateArbitrator(MessageState paymentSentMessage
}
}

public boolean isPaymentSentMessageAckedBySeller() {
return paymentSentMessageStatePropertySeller.get() == MessageState.ACKNOWLEDGED;
}

public boolean isPaymentSentMessageAckedByArbitrator() {
return paymentSentMessageStatePropertyArbitrator.get() == MessageState.ACKNOWLEDGED;
}

void setDepositTxSentAckMessage(AckMessage ackMessage) {
MessageState messageState = ackMessage.isSuccess() ?
MessageState.ACKNOWLEDGED :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -652,11 +652,12 @@ private void onAckMessage(AckMessage ackMessage, NodeAddress sender) {
// handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time
if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) {
if (trade.getTradePeer(sender) == trade.getSeller()) {
processModel.setPaymentSentAckMessage(ackMessage);
processModel.setPaymentSentAckMessageSeller(ackMessage);
trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG);
processModel.getTradeManager().requestPersistence();
} else if (trade.getTradePeer(sender) == trade.getArbitrator()) {
processModel.setPaymentSentAckMessageArbitrator(ackMessage);
processModel.getTradeManager().requestPersistence();
} else if (!ackMessage.isSuccess()) {
String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage();
log.warn(err);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ private void cleanup() {
timer.stop();
}
if (listener != null) {
processModel.getPaymentSentMessageStateProperty().removeListener(listener);
processModel.getPaymentSentMessageStatePropertySeller().removeListener(listener);
}
}

Expand All @@ -194,8 +194,8 @@ private void tryToSendAgainLater() {

if (resendCounter == 0) {
listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue);
processModel.getPaymentSentMessageStateProperty().addListener(listener);
onMessageStateChange(processModel.getPaymentSentMessageStateProperty().get());
processModel.getPaymentSentMessageStatePropertySeller().addListener(listener);
onMessageStateChange(processModel.getPaymentSentMessageStatePropertySeller().get());
}

// first re-send is after 2 minutes, then increase the delay exponentially
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
package haveno.core.trade.protocol.tasks;

import haveno.common.taskrunner.TaskRunner;
import haveno.core.network.MessageState;
import haveno.core.trade.Trade;
import haveno.core.trade.protocol.TradePeer;
import lombok.EqualsAndHashCode;
Expand Down Expand Up @@ -59,6 +58,6 @@ protected void setStateArrived() {

@Override
protected boolean isAckedByReceiver() {
return trade.getProcessModel().getPaymentSentMessageStatePropertyArbitrator().get() == MessageState.ACKNOWLEDGED;
return trade.getProcessModel().isPaymentSentMessageAckedByArbitrator();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,25 @@ protected TradePeer getReceiver() {

@Override
protected void setStateSent() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.SENT);
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.SENT);
super.setStateSent();
}

@Override
protected void setStateArrived() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.ARRIVED);
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.ARRIVED);
super.setStateArrived();
}

@Override
protected void setStateStoredInMailbox() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.STORED_IN_MAILBOX);
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.STORED_IN_MAILBOX);
super.setStateStoredInMailbox();
}

@Override
protected void setStateFault() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.FAILED);
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.FAILED);
super.setStateFault();
}

Expand All @@ -72,6 +72,6 @@ protected void onFault(String errorMessage, TradeMessage message) {

@Override
protected boolean isAckedByReceiver() {
return trade.getState().ordinal() >= Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG.ordinal();
return trade.getProcessModel().isPaymentSentMessageAckedBySeller();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ enum SellerState implements State {
private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>();
private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>();
@Getter
private final ObjectProperty<MessageState> messageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
private final ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
private Subscription tradeStateSubscription;
private Subscription paymentAccountDecryptedSubscription;
private Subscription payoutStateSubscription;
Expand Down Expand Up @@ -186,7 +186,7 @@ public void onSelectedItemChanged(PendingTradesListItem selectedItem) {

if (messageStateSubscription != null) {
messageStateSubscription.unsubscribe();
messageStateProperty.set(MessageState.UNDEFINED);
paymentSentMessageStateProperty.set(MessageState.UNDEFINED);
}

if (selectedItem != null) {
Expand All @@ -200,7 +200,7 @@ public void onSelectedItemChanged(PendingTradesListItem selectedItem) {
payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> {
onPayoutStateChanged(state);
});
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStateProperty(), this::onMessageStateChanged);
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStatePropertySeller(), this::onPaymentSentMessageStateChanged);
}
}
}
Expand All @@ -215,8 +215,8 @@ private void refresh() {
});
}

private void onMessageStateChanged(MessageState messageState) {
messageStateProperty.set(messageState);
private void onPaymentSentMessageStateChanged(MessageState messageState) {
paymentSentMessageStateProperty.set(messageState);
}

///////////////////////////////////////////////////////////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@ public BuyerStep3View(PendingTradesViewModel model) {
public void activate() {
super.activate();

model.getMessageStateProperty().addListener(messageStateChangeListener);
model.getPaymentSentMessageStateProperty().addListener(messageStateChangeListener);

updateMessageStateInfo();
}

public void deactivate() {
super.deactivate();

model.getMessageStateProperty().removeListener(messageStateChangeListener);
model.getPaymentSentMessageStateProperty().removeListener(messageStateChangeListener);
}


Expand All @@ -87,7 +87,7 @@ protected String getInfoText() {
}

private void updateMessageStateInfo() {
MessageState messageState = model.getMessageStateProperty().get();
MessageState messageState = model.getPaymentSentMessageStateProperty().get();
textFieldWithIcon.setText(Res.get("message.state." + messageState.name()));
Label iconLabel = textFieldWithIcon.getIconLabel();
switch (messageState) {
Expand Down
2 changes: 1 addition & 1 deletion proto/src/main/proto/pb.proto
Original file line number Diff line number Diff line change
Expand Up @@ -1568,7 +1568,7 @@ message ProcessModel {
bytes payout_tx_signature = 4;
bool use_savings_wallet = 5;
int64 funds_needed_for_trade = 6;
string payment_sent_message_state = 7;
string payment_sent_message_state_seller = 7;
string payment_sent_message_state_arbitrator = 8;
bytes maker_signature = 9;
TradePeer maker = 10;
Expand Down

0 comments on commit f1cdaa8

Please sign in to comment.