rename payment sent message state property for seller
This commit is contained in:
parent
00a2a7c2b7
commit
84d8a17ab4
9 changed files with 41 additions and 33 deletions
|
@ -735,9 +735,9 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||||
// 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?
|
// 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()) {
|
if (isBuyer()) {
|
||||||
MessageState expectedState = getPaymentSentMessageState();
|
MessageState expectedState = getPaymentSentMessageState();
|
||||||
if (expectedState != null && expectedState != processModel.getPaymentSentMessageStateProperty().get()) {
|
if (expectedState != null && expectedState != processModel.getPaymentSentMessageStatePropertySeller().get()) {
|
||||||
log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStateProperty().get());
|
log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStatePropertySeller().get());
|
||||||
processModel.getPaymentSentMessageStateProperty().set(expectedState);
|
processModel.getPaymentSentMessageStatePropertySeller().set(expectedState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2022,7 +2022,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||||
|
|
||||||
public MessageState getPaymentSentMessageState() {
|
public MessageState getPaymentSentMessageState() {
|
||||||
if (isPaymentReceived()) return MessageState.ACKNOWLEDGED;
|
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) {
|
switch (state) {
|
||||||
case BUYER_SENT_PAYMENT_SENT_MSG:
|
case BUYER_SENT_PAYMENT_SENT_MSG:
|
||||||
return MessageState.SENT;
|
return MessageState.SENT;
|
||||||
|
|
|
@ -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.
|
// 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.
|
// To enable that even after restart we persist the state.
|
||||||
@Setter
|
@Setter
|
||||||
private ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
|
private ObjectProperty<MessageState> paymentSentMessageStatePropertySeller = new SimpleObjectProperty<>(MessageState.UNDEFINED);
|
||||||
@Setter
|
@Setter
|
||||||
private ObjectProperty<MessageState> paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED);
|
private ObjectProperty<MessageState> paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED);
|
||||||
private ObjectProperty<Boolean> paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false);
|
private ObjectProperty<Boolean> paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false);
|
||||||
|
@ -203,7 +203,7 @@ public class ProcessModel implements Model, PersistablePayload {
|
||||||
.setPubKeyRing(pubKeyRing.toProtoMessage())
|
.setPubKeyRing(pubKeyRing.toProtoMessage())
|
||||||
.setUseSavingsWallet(useSavingsWallet)
|
.setUseSavingsWallet(useSavingsWallet)
|
||||||
.setFundsNeededForTrade(fundsNeededForTrade)
|
.setFundsNeededForTrade(fundsNeededForTrade)
|
||||||
.setPaymentSentMessageState(paymentSentMessageStateProperty.get().name())
|
.setPaymentSentMessageStateSeller(paymentSentMessageStatePropertySeller.get().name())
|
||||||
.setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name())
|
.setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name())
|
||||||
.setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation)
|
.setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation)
|
||||||
.setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation)
|
.setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation)
|
||||||
|
@ -240,9 +240,9 @@ public class ProcessModel implements Model, PersistablePayload {
|
||||||
processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress()));
|
processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress()));
|
||||||
processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress()));
|
processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress()));
|
||||||
|
|
||||||
String paymentSentMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageState());
|
String paymentSentMessageStateSellerString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateSeller());
|
||||||
MessageState paymentSentMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateString);
|
MessageState paymentSentMessageStateSeller = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateSellerString);
|
||||||
processModel.setPaymentSentMessageState(paymentSentMessageState);
|
processModel.setPaymentSentMessageStateSeller(paymentSentMessageStateSeller);
|
||||||
|
|
||||||
String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator());
|
String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator());
|
||||||
MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString);
|
MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString);
|
||||||
|
@ -274,11 +274,11 @@ public class ProcessModel implements Model, PersistablePayload {
|
||||||
return getP2PService().getAddress();
|
return getP2PService().getAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPaymentSentAckMessage(AckMessage ackMessage) {
|
void setPaymentSentAckMessageSeller(AckMessage ackMessage) {
|
||||||
MessageState messageState = ackMessage.isSuccess() ?
|
MessageState messageState = ackMessage.isSuccess() ?
|
||||||
MessageState.ACKNOWLEDGED :
|
MessageState.ACKNOWLEDGED :
|
||||||
MessageState.FAILED;
|
MessageState.FAILED;
|
||||||
setPaymentSentMessageState(messageState);
|
setPaymentSentMessageStateSeller(messageState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) {
|
void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) {
|
||||||
|
@ -288,8 +288,8 @@ public class ProcessModel implements Model, PersistablePayload {
|
||||||
setPaymentSentMessageStateArbitrator(messageState);
|
setPaymentSentMessageStateArbitrator(messageState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPaymentSentMessageState(MessageState paymentSentMessageStateProperty) {
|
public void setPaymentSentMessageStateSeller(MessageState paymentSentMessageStateProperty) {
|
||||||
this.paymentSentMessageStateProperty.set(paymentSentMessageStateProperty);
|
this.paymentSentMessageStatePropertySeller.set(paymentSentMessageStateProperty);
|
||||||
if (tradeManager != null) {
|
if (tradeManager != null) {
|
||||||
tradeManager.requestPersistence();
|
tradeManager.requestPersistence();
|
||||||
}
|
}
|
||||||
|
@ -302,6 +302,14 @@ public class ProcessModel implements Model, PersistablePayload {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPaymentSentMessageAckedBySeller() {
|
||||||
|
return paymentSentMessageStatePropertySeller.get() == MessageState.ACKNOWLEDGED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaymentSentMessageAckedByArbitrator() {
|
||||||
|
return paymentSentMessageStatePropertyArbitrator.get() == MessageState.ACKNOWLEDGED;
|
||||||
|
}
|
||||||
|
|
||||||
void setDepositTxSentAckMessage(AckMessage ackMessage) {
|
void setDepositTxSentAckMessage(AckMessage ackMessage) {
|
||||||
MessageState messageState = ackMessage.isSuccess() ?
|
MessageState messageState = ackMessage.isSuccess() ?
|
||||||
MessageState.ACKNOWLEDGED :
|
MessageState.ACKNOWLEDGED :
|
||||||
|
|
|
@ -652,11 +652,12 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
|
||||||
// handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time
|
// handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time
|
||||||
if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) {
|
if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) {
|
||||||
if (trade.getTradePeer(sender) == trade.getSeller()) {
|
if (trade.getTradePeer(sender) == trade.getSeller()) {
|
||||||
processModel.setPaymentSentAckMessage(ackMessage);
|
processModel.setPaymentSentAckMessageSeller(ackMessage);
|
||||||
trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG);
|
trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG);
|
||||||
processModel.getTradeManager().requestPersistence();
|
processModel.getTradeManager().requestPersistence();
|
||||||
} else if (trade.getTradePeer(sender) == trade.getArbitrator()) {
|
} else if (trade.getTradePeer(sender) == trade.getArbitrator()) {
|
||||||
processModel.setPaymentSentAckMessageArbitrator(ackMessage);
|
processModel.setPaymentSentAckMessageArbitrator(ackMessage);
|
||||||
|
processModel.getTradeManager().requestPersistence();
|
||||||
} else if (!ackMessage.isSuccess()) {
|
} else if (!ackMessage.isSuccess()) {
|
||||||
String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage();
|
String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage();
|
||||||
log.warn(err);
|
log.warn(err);
|
||||||
|
|
|
@ -170,7 +170,7 @@ public abstract class BuyerSendPaymentSentMessage extends SendMailboxMessageTask
|
||||||
timer.stop();
|
timer.stop();
|
||||||
}
|
}
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
processModel.getPaymentSentMessageStateProperty().removeListener(listener);
|
processModel.getPaymentSentMessageStatePropertySeller().removeListener(listener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,8 +194,8 @@ public abstract class BuyerSendPaymentSentMessage extends SendMailboxMessageTask
|
||||||
|
|
||||||
if (resendCounter == 0) {
|
if (resendCounter == 0) {
|
||||||
listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue);
|
listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue);
|
||||||
processModel.getPaymentSentMessageStateProperty().addListener(listener);
|
processModel.getPaymentSentMessageStatePropertySeller().addListener(listener);
|
||||||
onMessageStateChange(processModel.getPaymentSentMessageStateProperty().get());
|
onMessageStateChange(processModel.getPaymentSentMessageStatePropertySeller().get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// first re-send is after 2 minutes, then increase the delay exponentially
|
// first re-send is after 2 minutes, then increase the delay exponentially
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
package haveno.core.trade.protocol.tasks;
|
package haveno.core.trade.protocol.tasks;
|
||||||
|
|
||||||
import haveno.common.taskrunner.TaskRunner;
|
import haveno.common.taskrunner.TaskRunner;
|
||||||
import haveno.core.network.MessageState;
|
|
||||||
import haveno.core.trade.Trade;
|
import haveno.core.trade.Trade;
|
||||||
import haveno.core.trade.protocol.TradePeer;
|
import haveno.core.trade.protocol.TradePeer;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
@ -59,6 +58,6 @@ public class BuyerSendPaymentSentMessageToArbitrator extends BuyerSendPaymentSen
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isAckedByReceiver() {
|
protected boolean isAckedByReceiver() {
|
||||||
return trade.getProcessModel().getPaymentSentMessageStatePropertyArbitrator().get() == MessageState.ACKNOWLEDGED;
|
return trade.getProcessModel().isPaymentSentMessageAckedByArbitrator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,25 +40,25 @@ public class BuyerSendPaymentSentMessageToSeller extends BuyerSendPaymentSentMes
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setStateSent() {
|
protected void setStateSent() {
|
||||||
trade.getProcessModel().setPaymentSentMessageState(MessageState.SENT);
|
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.SENT);
|
||||||
super.setStateSent();
|
super.setStateSent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setStateArrived() {
|
protected void setStateArrived() {
|
||||||
trade.getProcessModel().setPaymentSentMessageState(MessageState.ARRIVED);
|
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.ARRIVED);
|
||||||
super.setStateArrived();
|
super.setStateArrived();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setStateStoredInMailbox() {
|
protected void setStateStoredInMailbox() {
|
||||||
trade.getProcessModel().setPaymentSentMessageState(MessageState.STORED_IN_MAILBOX);
|
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.STORED_IN_MAILBOX);
|
||||||
super.setStateStoredInMailbox();
|
super.setStateStoredInMailbox();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setStateFault() {
|
protected void setStateFault() {
|
||||||
trade.getProcessModel().setPaymentSentMessageState(MessageState.FAILED);
|
trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.FAILED);
|
||||||
super.setStateFault();
|
super.setStateFault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,6 +72,6 @@ public class BuyerSendPaymentSentMessageToSeller extends BuyerSendPaymentSentMes
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isAckedByReceiver() {
|
protected boolean isAckedByReceiver() {
|
||||||
return trade.getState().ordinal() >= Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG.ordinal();
|
return trade.getProcessModel().isPaymentSentMessageAckedBySeller();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
||||||
private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>();
|
private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>();
|
||||||
private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>();
|
private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>();
|
||||||
@Getter
|
@Getter
|
||||||
private final ObjectProperty<MessageState> messageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
|
private final ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
|
||||||
private Subscription tradeStateSubscription;
|
private Subscription tradeStateSubscription;
|
||||||
private Subscription paymentAccountDecryptedSubscription;
|
private Subscription paymentAccountDecryptedSubscription;
|
||||||
private Subscription payoutStateSubscription;
|
private Subscription payoutStateSubscription;
|
||||||
|
@ -186,7 +186,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
||||||
|
|
||||||
if (messageStateSubscription != null) {
|
if (messageStateSubscription != null) {
|
||||||
messageStateSubscription.unsubscribe();
|
messageStateSubscription.unsubscribe();
|
||||||
messageStateProperty.set(MessageState.UNDEFINED);
|
paymentSentMessageStateProperty.set(MessageState.UNDEFINED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedItem != null) {
|
if (selectedItem != null) {
|
||||||
|
@ -200,7 +200,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
||||||
payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> {
|
payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> {
|
||||||
onPayoutStateChanged(state);
|
onPayoutStateChanged(state);
|
||||||
});
|
});
|
||||||
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStateProperty(), this::onMessageStateChanged);
|
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStatePropertySeller(), this::onPaymentSentMessageStateChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,8 +215,8 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onMessageStateChanged(MessageState messageState) {
|
private void onPaymentSentMessageStateChanged(MessageState messageState) {
|
||||||
messageStateProperty.set(messageState);
|
paymentSentMessageStateProperty.set(messageState);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class BuyerStep3View extends TradeStepView {
|
||||||
public void activate() {
|
public void activate() {
|
||||||
super.activate();
|
super.activate();
|
||||||
|
|
||||||
model.getMessageStateProperty().addListener(messageStateChangeListener);
|
model.getPaymentSentMessageStateProperty().addListener(messageStateChangeListener);
|
||||||
|
|
||||||
updateMessageStateInfo();
|
updateMessageStateInfo();
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ public class BuyerStep3View extends TradeStepView {
|
||||||
public void deactivate() {
|
public void deactivate() {
|
||||||
super.deactivate();
|
super.deactivate();
|
||||||
|
|
||||||
model.getMessageStateProperty().removeListener(messageStateChangeListener);
|
model.getPaymentSentMessageStateProperty().removeListener(messageStateChangeListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ public class BuyerStep3View extends TradeStepView {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateMessageStateInfo() {
|
private void updateMessageStateInfo() {
|
||||||
MessageState messageState = model.getMessageStateProperty().get();
|
MessageState messageState = model.getPaymentSentMessageStateProperty().get();
|
||||||
textFieldWithIcon.setText(Res.get("message.state." + messageState.name()));
|
textFieldWithIcon.setText(Res.get("message.state." + messageState.name()));
|
||||||
Label iconLabel = textFieldWithIcon.getIconLabel();
|
Label iconLabel = textFieldWithIcon.getIconLabel();
|
||||||
switch (messageState) {
|
switch (messageState) {
|
||||||
|
|
|
@ -1568,7 +1568,7 @@ message ProcessModel {
|
||||||
bytes payout_tx_signature = 4;
|
bytes payout_tx_signature = 4;
|
||||||
bool use_savings_wallet = 5;
|
bool use_savings_wallet = 5;
|
||||||
int64 funds_needed_for_trade = 6;
|
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;
|
string payment_sent_message_state_arbitrator = 8;
|
||||||
bytes maker_signature = 9;
|
bytes maker_signature = 9;
|
||||||
TradePeer maker = 10;
|
TradePeer maker = 10;
|
||||||
|
|
Loading…
Reference in a new issue